我接受用户输入(JS代码)并实时执行(处理)它们以显示一些输出。
有时代码具有零宽度空间,这真的很奇怪。我不知道用户是如何输入的。示例 - “($".length === 3
我需要能够从JS中的代码中删除该字符。我该怎么办?或者也许还有其他一些方法来执行JS代码,以便浏览器不考虑零宽度空格字符?
答案 0 :(得分:89)
Unicode具有以下零宽度字符:
要从JavaScript中的字符串中删除它们,您可以使用简单的正则表达式:
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’s control characters中的一些。
答案 1 :(得分:8)
我遇到了一个问题,一些不可见的字符破坏了我的JSON并导致意外的令牌ILLEGAL 异常导致我的网站崩溃。
以下是我使用RegExp变量的解决方案:
var re = new RegExp("\u2028|\u2029");
var result = text.replace(re, '');
有关Javascript和零宽度空间的更多信息,请点击此处: Zero Width Spaces
答案 2 :(得分:3)
str.replace(/\u200B/g,'');
200B是零宽度空间8203的十六进制。用空字符串替换它以删除此
答案 3 :(得分:1)
[].filter.call( str, function( c ) {
return c.charCodeAt( 0 ) !== 8203;
} );
过滤每个字符以删除8203字符代码(零宽度空间unicode编号)。