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

新手上路,请多包涵

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

有时代码有那些零宽度的空格;这真的很奇怪。我不知道用户是如何输入的。示例: "(​$".length === 3

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

原文由 user1437328 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

原文由 Mathias Bynens 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了一个问题,一些不可见的字符破坏了我的 JSON 并导致 Unexpected Token ILLEGAL 异常导致我的网站崩溃。

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

     var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');

您可以在此处找到有关 Javascript 和零宽度空格的更多信息: 零宽度空格

原文由 Technotronic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏