从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编号)。