乐趣区

关于javascript:奇妙的隐形字符

遇到的问题

QA 大大从应用公司的外部文档编辑器书写的文章中复制进去一串字符会被前端校验逻辑拦挡,这个逻辑是校验数字 & 字母的正则表达式,在输入框最左侧按一下 delete 键就会通过校验(对于他发现这个操作示意神奇)。

解决

初步猜想是因为复制出了空格,然而本地测试发现 QA 提供的字符串即便做了 trim()操作依然不通过校验,起初在控制台间接用正则表达式尝试校验,发现将 QA 提供的字符串复制到控制台变成了有小红点的字符串,如图

将鼠标悬浮在小红点上显示为字符 \u200b,最初 str.replace(/\u200B/g,”)去除隐形字符串后失常了。

探索

不可见字符在计算机科学和通信学中被称为控制字符或非打印字符,是字符集中的一个码位(code point),不是一个书面符号,也就是在个别的书面出现环境中它是不可见字符。
咱们常见的 /n,/r 就是这类字符,咱们能够尝试新建一个这样的字符串变量而后 console 进去是看不见的,然而咱们去查看该字符串的长度却不等于 0。

启发

对于这个隐形字符串,咱们能够利用起来做一些隐形签名或者水印。所以猜想我遇到这个隐形字符是来自公司外部编辑器做的水印,文章被复制的化依据这写隐形字符来判断是否是本人的文章被盗用。

退出移动版