ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript从字符串中删除ZERO WIDTH SPACE(unicode 8203)

2019-09-25 15:34:20  阅读:2039  来源: 互联网

标签:javascript unicode regex


我正在写一些处理网站内容的JavaScript.当用户按下退格键时,SharePoint文本编辑器倾向于在文本中放置“零宽度空格”字符,这阻碍了我的努力.
字符的unicode值为8203,或十六进制的B200.我试图使用默认的“替换”功能来摆脱它.我尝试过很多变种,但都没有变化:

var a = "o​m"; //the invisible character is between o and m

var b = a.replace(/\u8203/g,'');
= a.replace(/\uB200/g,'');
= a.replace("\\uB200",'');

等等等等.我在这个主题上尝试了很多变化.这些表达式都不起作用(在Chrome和Firefox中测试)唯一有效的方法是在表达式中键入实际字符:

var b = a.replace("​",''); //it's there, believe me

这带来了潜在的问题.角色是不可见的,因此线条本身没有意义.我可以通过评论解决这个问题.但是,如果代码被重用,并且使用非Unicode编码保存文件(或者当它部署到SharePoint时,不能保证它不会弄乱编码)它将停止工作.有没有办法使用unicode符号而不是字符本身来编写它?

[我对这个角色的谣言]

如果你没有遇到这个角色,(你可能没有,看到它肉眼看不见,除非它破坏了你的代码并且你在试图找到它时发现了它)这是一个真正的漏洞会导致某些类型的模式匹配失灵.我为你关进了野兽:

[]< - 小心,不要让它逃脱. 如果要查看它,请将这些括号复制到文本编辑器中,然后通过它们迭代光标.你会发现你需要三个步骤来传递看似2个字符的东西,你的光标将跳过中间的一个步骤.

解决方法:

unicode转义中的数字应为十六进制,8203的十六进制为200B(实际上为Unicode zero-width space),因此:

var b = a.replace(/\u200B/g,'');

Live Example

var a = "o​m"; //the invisible character is between o and m
var b = a.replace(/\u200B/g,'');
console.log("a.length = " + a.length);      // 3
console.log("a === 'om'? " + (a === 'om')); // false
console.log("b.length = " + b.length);      // 2
console.log("b === 'om'? " + (b === 'om')); // true

标签:javascript,unicode,regex
来源: https://codeday.me/bug/20190925/1816213.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有