我在IE解析日期时遇到了问题,我花了两个小时才知道我实际解析的日期中有隐藏的字符。
无视解析问题,我只想知道这些是什么?
alert("3/9/2016"==="3/9/2016")
alert("3/9/2016")
alert("3/9/2016")
如果没有人解释,我如何修剪这些奇怪的字符以获得有效的字符串?
答案 0 :(得分:6)
似乎就是这样:http://www.fileformat.info/info/unicode/char/200e/index.htm
我做了:"3/9/2016".charCodeAt(0)
然后用Google搜索结果。
只需更换不符合预期的一切。在这种情况下,您似乎只想要数字或斜杠。所以忽略其他所有内容都是/[^\d\/]
。所以这有效:
"3/9/2016".replace(/[^\d\/]/g, '') === '3/9/2016'
答案 1 :(得分:2)
使用charCodeAt
我认为该符号是字符代码8026
。然后我找到了another answer,这有助于解释您的问题。这是答案的相关部分。
您可能会获得LTR标记,因为您的显示区域设置是RTL。除此之外,请考虑区域设置始终会影响输出。也许您的语言环境使用dd / mm / yyyy格式而不是mm / dd / yyyy格式。或者您的语言环境可能需要亚洲或阿拉伯语字符。这些都是确定显示格式时的注意事项,但永远不适合机器解析。
tl; dr:问题源于获取基于机器的语言环境的输出,这是IE考虑的事情。如果语言环境显示RTL,IE输出LTR,或者它对亚洲或阿拉伯语言有一些奇怪的支持。
尽管如此,上述答案应该是您需要的所有信息:不要指望语言环境格式的文本可以在机器上使用,它们只是为了人类可读。当然,你可以过滤掉角色,但总有可能遇到另一种语言环境。
答案 2 :(得分:2)
(只是为了完整;显然这不符合评论。)
➜ ~ hexdump -C tmp.js
00000000 61 6c 65 72 74 28 22 e2 80 8e 33 e2 80 8e 2f e2 |alert("...3.../.|
00000010 80 8e 39 e2 80 8e 2f e2 80 8e 32 30 31 36 22 29 |..9.../...2016")|
00000020 0a 61 6c 65 72 74 28 22 33 2f 39 2f 32 30 31 36 |.alert("3/9/2016|
00000030 22 29 0a |").|
答案 3 :(得分:1)
这些是left-to-right标记。 Unicode uE2808E。