从JavaScriptstring中删除零宽度的空格字符
我把用户input(JS代码)和执行(处理)他们实时显示一些输出。
有时代码有这些零宽度的空间,这真的很奇怪。 我不知道用户是如何input的。 例子 – “ ($".length === 3
我需要能够从JS中的代码中删除该字符。 我该怎么做? 或者也许还有一些其他方式来执行该JS代码,以便浏览器不考虑零宽度空格字符?
Unicode有以下零宽字符:
- U + 200B零宽度空间
- U + 200C零宽度非连接器的Unicode代码点
- U + 200D零宽度连接器的Unicode代码点
- U + FEFF零宽度不间断空间Unicode代码点
要从JavaScript中的string中删除它们,您可以使用一个简单的正则expression式:
var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe'; console.log(userInput.length); // 9 var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, ''); console.log(result.length); // 5
请注意,还有许多可能不可见的符号。 例如,一些ASCII的控制字符 。
我有一个问题,一些不可见的字符正在破坏我的JSON,导致意外的令牌非法例外,这是我的网站崩溃。
这是我使用RegExpvariables的解决scheme:
var re = new RegExp("\u2028|\u2029"); var result = text.replace(re, '');
更多关于Javascript和零宽度的空间,你可以在这里find: 零宽度空间
str.replace(/\u200B/g,'');
200B是零宽度空间8203的hex数。用空stringreplace掉这个
[].filter.call( str, function( c ) { return c.charCodeAt( 0 ) !== 8203; } );
筛选每个字符以删除8203 char代码(零宽度空间unicode编号)。