我遇到一种情况,如果网格包含某个子字符串,我必须搜索该网格。我有一个搜索栏,用户可以在其中输入字符串。问题是网格包含日语文本和 Unicode 字符的混合, 例如: MAGシンチ注 333MBq 。
如何比较从键盘输入的字母“M”和上例中的字母“M”的内容相等性?我正在尝试使用纯 Javascript 而不是 Jquery 或其他库来做到这一点。我必须在 Internet Explorer 中执行此操作。
谢谢
最佳答案
正如 @Rhymoid 对这个问题的富有洞察力的评论中提到的,现代 JavaScript (ES2015) 包括对 Unicode 规范化的支持。规范化的一种模式是将“兼容”的字母形式从较高的代码页映射到较低代码页中的最基本的代表(总而言之,它有点涉及)。 .normalize("NFKD")
方法会将日语代码页中的“M”映射到对应的拉丁语代码页。因此
"MAGシンチ注 333MBq".normalize("NFKD")
会给
"MAGシンチ注 333MBq"
截至 2016 年底,IE 不支持 .normalize()
。
在较低级别,ES2015 还具有 .codePointAt()
(在另一个好的答案中提到),它类似于下面描述的较旧的 .charCodeAt()
但它还可以理解 UTF-16 对。但是,Safari 不支持 .codePointAt()
(同样是在 2016 年末)。
以下是旧版浏览器的原始答案
您可以使用.charCodeAt()
方法检查字符串中的UTF-16字符代码。
"M".charCodeAt(0)
是 77,而
"M".charCodeAt(0)
是 65325。
这种方法很复杂,因为对于某些 Unicode 字符,UTF-16 表示涉及 JavaScript 字符串中的两个单独的字符位置。该语言不提供处理该问题的 native 支持,因此您必须自己完成。 55926 和 57343(D800 和 DFFF 十六进制)之间的字符代码表示两个字符对的开始。 The UTF-16 Wikipedia page has more information ,还有各种其他来源。
关于javascript - 如何使用 Javascript 比较 "M"和 "M"(UTF 格式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203347/