IE中JavaScript字符串的拆分与比较

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 "

这真是令人惊讶。我无法在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

"‎‎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()