从JavaScript字符串中删除零宽度空格字符

use*_*328 55 javascript unicode

我接受用户输入(JS代码)并实时执行(处理)它们以显示一些输出.

有时代码具有零宽度空间,这真的很奇怪.我不知道用户是如何输入的.示例 - "(?$".length === 3

我需要能够从JS中的代码中删除该字符.我该怎么办?或者也许还有其他一些方法来执行JS代码,以便浏览器不考虑零宽度空格字符?

Mat*_*ens 91

Unicode具有以下零宽度字符:

  • U + 200B零宽度空间
  • U + 200C零宽度非连接器Unicode代码点
  • U + 200D零宽度连接器Unicode代码点
  • U + FEFF零宽度无中断空间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
Run Code Online (Sandbox Code Playgroud)

请注意,还有许多符号可能不可见.例如,一些ASCII的控制字符.

  • [@IvánCastellanos提到](https://twitter.com/ivanca/status/354252316435689472)可能考虑的其他一些字符:U + 200E左至右标记和U + 200F右至左标记.正如我所说,可能还有其他符号本身并不严格可见. (4认同)

Tec*_*nic 8

我有一个问题,一些不可见的字符破坏我的JSON并导致意外的令牌ILLEGAL异常,这会导致我的网站崩溃.

这是我使用RegExp变量的解决方案:

    var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');
Run Code Online (Sandbox Code Playgroud)

有关Javascript和零宽度空间的更多信息,请点击此处: 零宽度空间


Tar*_*mud 5

str.replace(/\u200B/g,'');
Run Code Online (Sandbox Code Playgroud)

200B 是零宽度空格 8203 的十六进制。将其替换为空字符串以删除它