【问题标题】:How to compare exact same string but with different charCodes in Javascript如何在Javascript中比较完全相同但具有不同charCode的字符串
【发布时间】:2015-06-30 10:56:48
【问题描述】:

我遇到的问题是 Sharepoint API 从表中返回一个字符串,该字符串看起来与我想要比较的字符串完全相同。但比较总是失败。

at
"people lookbook+"
lt
"peo​ple lookboo​k+​​"
at == lt
false
at === lt
false

当我遍历字符串并打印出字符码时,我可以看到差异。

那么我该如何比较它们或者我应该如何解码呢?

这里是字符代码:

for (index = 0; index < at.length; ++index) {
    console.log("char " + index + ": " + at.charCodeAt(index));
}
VM1116:2 char 0: 112
VM1116:2 char 1: 101
VM1116:2 char 2: 111
VM1116:2 char 3: 112
VM1116:2 char 4: 108
VM1116:2 char 5: 101
VM1116:2 char 6: 32
VM1116:2 char 7: 108
VM1116:2 char 8: 111
VM1116:2 char 9: 111
VM1116:2 char 10: 107
VM1116:2 char 11: 98
VM1116:2 char 12: 111
VM1116:2 char 13: 111
VM1116:2 char 14: 107
VM1116:2 char 15: 43

for (index = 0; index < lt.length; ++index) {
    console.log("char " + index + ": " + lt.charCodeAt(index));
}
VM1118:2 char 0: 112
VM1118:2 char 1: 101
VM1118:2 char 2: 111
VM1118:2 char 3: 8203
VM1118:2 char 4: 112
VM1118:2 char 5: 108
VM1118:2 char 6: 101
VM1118:2 char 7: 32
VM1118:2 char 8: 108
VM1118:2 char 9: 111
VM1118:2 char 10: 111
VM1118:2 char 11: 107
VM1118:2 char 12: 98
VM1118:2 char 13: 111
VM1118:2 char 14: 111
VM1118:2 char 15: 8203
VM1118:2 char 16: 107
VM1118:2 char 17: 43
VM1118:2 char 18: 8203
VM1118:2 char 19: 8203

【问题讨论】:

  • 那里有一个“零宽度空间”(charCode 8203),只需在比较之前将其替换为空字符串即可。
  • 是否可以在没有正则表达式的情况下执行此操作。也许创建一个 dom 元素并阅读文本左右?

标签: javascript string compare string-comparison


【解决方案1】:

8203 是Zero width space。它可能并不是真正需要的。你可以像这样去掉它

lt = lt.replace( /\u8203/g, '' );

然后比较将起作用。问题是如果插入了一些其他字符,在这种情况下您需要将其他字符添加到正则表达式中。这可能不是一个非常优雅的解决方案。

【讨论】:

  • 不幸的是,这并没有删除 8203
  • 是的,抱歉,没来得及检查……当然是十六进制,charCodeAt 给出十进制表示。
【解决方案2】:

在 Wa Kai 和 nomve 的帮助下,我发现有那些 8203 字符码,我可以使用以下代码摆脱:

lt.replace(/\u200B/g,'')

只是为了让舒尔你也可以使用这个:

lt.replace(/[\u200B-\u200D\uFEFF]/g, '');

将删除:

  • U+200B 零宽度空间
  • U+200C 零宽度非连接 Unicode 代码点
  • U+200D 零宽度连接符 Unicode 代码点
  • U+FEFF 零宽度不间断空格 Unicode 代码点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多