遇到的问题
QA大大从使用公司的内部文档编辑器书写的文章中复制出来一串字符会被前端校验逻辑拦截,这个逻辑是校验数字&字母的正则表达式,在输入框最左侧按一下delete键就会通过校验(对于他发现这个操作表示神奇)。
解决
初步猜测是因为复制出了空格,但是本地测试发现QA提供的字符串即使做了trim()操作仍然不通过校验,后来在控制台直接用正则表达式尝试校验,发现将QA提供的字符串复制到控制台变成了有小红点的字符串,如图
将鼠标悬浮在小红点上显示为字符\u200b,最后str.replace(/\u200B/g,'')去除隐形字符串后正常了。
探究
不可见字符在计算机科学和通信学中被称为控制字符或非打印字符,是字符集中的一个码位(code point),不是一个书面符号,也就是在一般的书面呈现环境中它是不可见字符。
我们常见的/n,/r
就是这类字符,我们可以尝试新建一个这样的字符串变量然后console出来是看不见的,但是我们去查看该字符串的长度却不等于0。
启发
关于这个隐形字符串,我们可以利用起来做一些隐形签名或者水印。所以猜测我遇到这个隐形字符是来自公司内部编辑器做的水印,文章被复制的化根据这写隐形字符来判断是否是自己的文章被盗用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。