IE中JavaScript字符串的拆分与比较
这真是令人惊讶。我无法在IE中进行简单的字符串比较IE中JavaScript字符串的拆分与比较,javascript,Javascript,这真是令人惊讶。我无法在IE中进行简单的字符串比较 "6/17/2015 3:21:39 PM".split(' ')[2].trim() == "PM" 返回false "6/17/2015 3:21:39 PM".split(' ')[2].trim() 正确返回“PM”,但比较失败 我尝试了包括自定义拆分函数在内的各种技巧,但都没有成功 即使在拆分单个数字字符串值之后,parseInt也会返回NaN。是一个字符问题: 你的PM "
"6/17/2015 3:21:39 PM".split(' ')[2].trim() == "PM"
返回false
"6/17/2015 3:21:39 PM".split(' ')[2].trim()
正确返回“PM”,但比较失败
我尝试了包括自定义拆分函数在内的各种技巧,但都没有成功
即使在拆分单个数字字符串值之后,parseInt也会返回NaN。是一个字符问题: 你的<代码>PM
"PM".length //returns 4
^^^^ -> String.fromCharCode(8206, 8206, 80, 77)
我的PM
"PM".length //returns 2
^^^^ -> String.fromCharCode(80, 77)
解决方案:替换不需要的字符
”6./17/2015 3.:21:39 替换(/[^\d\w/:]+/gi,”).split(“”)[2].trim()=“PM”//true!”!
您的PM出现问题
我将你的PM复制到一个文本编辑器中,并在一个十六进制编辑器中打开它。以下是输出:
您会注意到就在PM
之前有一些奇怪的字符
下面是它通常的样子:
在Google中搜索E2 80 8E
字符提供了一个指向页面的链接,该页面显示它是用于从左到右标记的Unicode字符获取您的代码并打印出字符代码,您会得到:
34 8206 54 8206 47 8206 49 55
8206 47 8206 50 48 49 53 8206
32 8206 51 8206 58 8206 50 49
8206 58 8206 51 57 8206 32 8206
80 77 34 46 115 112 108 105
116 40 39 32 39 41 91 50
93 46 116 114 105 109 40 41
32 61 61 32 34 80 77 34
其中的8206
字符是从某个地方复制字符串而进入代码的。标记是打印时不可见的控制字符,它仅影响相邻字符的显示方式
这是造成你问题的最后一个原因。拆分字符串的最后一个字符串不是“PM”
,而是“\u200EPM”
。当您将其与字符串“PM”进行比较时,它们并不相等
如果您键入代码而不是复制粘贴它,它的工作原理与预期一样。作为一种暴力方法,您可以通过插入
删除所有不需要的字符。替换(/[^\d\w:/]/g',)
您是否记录了正在比较的值?每个的
长度如何?您使用的是什么版本的IE?我在Visual Studio中调试并观看了值。长度是正确的。IE是11。你能发布JSON.stringify(字符串)
返回的内容吗?你确定那里没有隐藏的人物吗?你的PM
字符串怎么样?你的页面编码是什么?谢谢你的帮助。该字符串直接来自new Date().toLocalString()。现在,我已经开始通过存储原始日期对象(我已将其转换为LocaleString)并直接使用它来解决这个问题。它现在可以工作了,但我仍然想知道为什么这不起作用。现在,我将尝试json stringify建议。如果您将他的“PM”复制到文本编辑器中并继续按backspace,您将看到他的中有一个额外的字符。谢谢!替换者成功了@lrsjng没有必要,很明显应该替换不需要的字符,我甚至考虑替换utf8不寻常的字符,如.replace(/[^\u0000-\u007F]+/gi,”),很抱歉看到您的响应太晚了。我在下面标出了与你的答案相同的正确答案。@RazaAli没问题;)
"6/17/2015 3:21:39 PM".replace(/[^\d\w:/ ]/g, '').split(' ')[2].trim()