遇到一个很诡异的字符串问题!

2018-05-07 11:05:35 +08:00
 yuuk520
let str = '‭ 15556268842 ‬';
console.warn(str.length); // 13

大家可以复制这个字符串到控制打印下。这个数据是从 excel 表中导出来的,疑似字符串前后各有一个隐藏的字符,但是不占位。。。纳尼?

5591 次点击
所在节点    JavaScript
14 条回复
BlackGrasshopper
2018-05-07 11:09:55 +08:00
空格啊,怎么没占位
zjp
2018-05-07 11:13:04 +08:00
两个零宽字符 前面有一个 U+202D 后面一个 U+202C
找个小工具检测下字符不就行了
btw U+202D 很好玩…
songz
2018-05-07 11:15:56 +08:00
复制下来,用左右键移动光标,会有两个隐藏的字符,按下左或右光标不会移动
yuuk520
2018-05-07 11:17:17 +08:00
很奇怪,发布到 V2EX 后就被解析出空格了。我控制台里面的截图:
![Alt text]( )
rabbbit
2018-05-07 11:17:42 +08:00
我这输出是 15, chrome
let str = '‭ 15556268842 ‬';
console.warn(str.length); // 15
yuuk520
2018-05-07 11:20:04 +08:00
@rabbbit 去掉那两个可见的占位空格
rabbbit
2018-05-07 11:22:29 +08:00
@yuuk520 那就是 13 呀,F12 可以看到前后各有一个隐藏字符
rabbbit
2018-05-07 11:24:51 +08:00
讲个好玩的坑
'𠀀'.length // 2
Array.from('𠀀').length // 1
lommo
2018-05-07 11:30:10 +08:00
\u0020\u0031\u0035\u0035\u0035\u0036\u0032\u0036\u0038\u0038\u0034\u0032\u0020\u202c
input2output
2018-05-07 11:49:16 +08:00
键盘 左右移动就感觉到了
broker
2018-05-07 11:50:34 +08:00
还有一个 U+202E 也比较好玩

this['‮'&&'alert']`1`
gongzhang
2018-05-07 12:27:39 +08:00
Unicode 字符串长度有多种含义,看你要哪种:
1. 存储字节数
2. UTF8 或 UTF16 编码后的编码单元数
3. Unicode Scala 数
4. 最终显示出来的字符数
A3m0n
2018-05-07 16:02:45 +08:00
https://i.loli.net/2018/05/07/5af007deb6e4f.gif

做了个 gif,注意光标位置以及下方的列数。
linxiaoziruo
2018-05-07 17:32:22 +08:00
我打印出来 15

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX