如果之前已经提出过这个问题,请指出相关问题 .
tl; dr:如何根据 English 规则忽略套管,比较JavaScript中的两个字符串?
我的代码分析和比较来自两个不同来源的数据,每个来源对关键字是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较 . 但是,如果在其他文化中使用(例如土耳其及其与字母I的臭名昭着的问题),我不希望系统中断 .
JavaScript是否有任何方法可以进行与文化无关(读取:英语)不区分大小写的字符串比较?
从理论上讲,有一种方法:String.localCompare() .
问题是大多数浏览器都没有正确实现它 .
使用String.toLocaleLowerCase()可能会有更多的运气 .
例:
if ("Äpfel".toLocaleLowerCase() == "äpfel".toLocaleLowerCase()) alert("Case Insensitive Match")
请注意,以下内容不匹配(因为ä和a是不同的字符):
if ("Äpfel".toLocaleLowerCase() == "apfel".toLocaleLowerCase()) alert("Case Insensitive Match")
您可以使用 localeCompare 但请注意,浏览器之间的实现方式不同 . 在Chrome / Firefox / IE11中似乎有用的是:
localeCompare
first.localeCompare("First", navigator.language, { sensitivity: "base" }) === 0
var console = function() { var log = function(message) { strMessage = "<p>" + message + "</p>"; $("#console").append(strMessage); }; return { log: log }; }() var first = "first"; var result = first.localeCompare("First", navigator.language, { sensitivity: "base" }) === 0; console.log(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="console"> </div>
如果在其他文化中使用(例如土耳其及其字母I中臭名昭着的问题),如何比较JavaScript中的两个字符串而不会破坏? JavaScript是否有任何方法可以进行与文化无关的不区分大小写的字符串比较?
是的,只需使用不受区域设置影响的standard .toLowerCase method即可 . a.toLowerCase() == b.toLowerCase() 完全没问题 . spec甚至要求:
a.toLowerCase() == b.toLowerCase()
必须根据Unicode字符数据库中的大小写映射派生结果
无论设置如何,这在所有系统中都是一致的 .
要尊重当前区域设置,请明确使用.toLocaleLowerCase . MDN声明:
在大多数情况下,这将产生与toLowerCase()相同的结果,但对于某些语言环境(例如土耳其语),其案例映射不遵循Unicode中的默认大小写映射,可能会有不同的结果 .
但是,relying on locales does not seem to work well ......
3 回答
从理论上讲,有一种方法:String.localCompare() .
问题是大多数浏览器都没有正确实现它 .
使用String.toLocaleLowerCase()可能会有更多的运气 .
例:
请注意,以下内容不匹配(因为ä和a是不同的字符):
您可以使用
localeCompare
但请注意,浏览器之间的实现方式不同 . 在Chrome / Firefox / IE11中似乎有用的是:是的,只需使用不受区域设置影响的standard .toLowerCase method即可 .
a.toLowerCase() == b.toLowerCase()
完全没问题 . spec甚至要求:无论设置如何,这在所有系统中都是一致的 .
要尊重当前区域设置,请明确使用.toLocaleLowerCase . MDN声明:
但是,relying on locales does not seem to work well ......