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

时间:2015-06-17 21:27:46

标签: 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。

4 个答案:

答案 0 :(得分:1)

是字符问题:

您的‎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‎ ‎PM".replace(/[^\d\w/: ]+/gi,"").split(' ')[2].trim() == "PM" //true!

答案 1 :(得分:1)

作为强力方法,您可以通过插入.replace(/[^\d\w:/ ]/g, '')

删除所有不需要的字符
"‎6‎/‎17‎/‎2015‎ ‎3‎:‎21‎:‎39‎ ‎PM".replace(/[^\d\w:/ ]/g, '').split(' ')[2].trim()

答案 2 :(得分:0)

您的PM存在问题。

我将您的PM复制到文本编辑器中并在Hex编辑器中打开它。这是输出:

enter image description here

您会在PM之前发现一些奇怪的字符。

以下是正常情况:

enter image description here

在Google中搜索E2 80 8E个字符会提供指向this页面的链接,该页面显示它是从左到右标记的Unicode字符

答案 3 :(得分:0)

获取代码并打印出字符代码,您将获得:

  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个字符是left-to-right mark character进入你的代码,可能是从某个地方复制字符串。标记是一个控制字符,在打印时不可见,它只影响相邻字符的显示方式。

这是造成问题的最后一个。拆分字符串的最后一个字符串不是"PM",而是"\u200EPM"。将它与字符串"PM"进行比较时,它们不相等。

如果您输入代码而不是复制粘贴代码,它就会按预期工作。