如果之前已经提出过这个问题,请指出相关问题。
tl; dr:如何根据英语规则忽略套管,比较JavaScript中的两个字符串?
我的代码分析并比较来自两个不同来源的数据,每个来源对关键字是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较。但是,如果在其他文化中使用(例如土耳其及其与字母I的臭名昭着的问题),我不希望系统中断。
JavaScript是否有任何方法可以进行与文化无关(读取:英语)不区分大小写的字符串比较?
答案 0 :(得分:10)
如果在其他文化中使用(例如土耳其及其字母I中臭名昭着的问题),如何比较JavaScript中的两个字符串而不会破坏? JavaScript是否有任何方法可以进行与文化无关的不区分大小写的字符串比较?
是的,只需使用区域设置未受影响的standard .toLowerCase
method 即可。 a.toLowerCase() == b.toLowerCase()
完全没问题。 spec甚至要求:
必须根据Unicode字符数据库中的大小写映射派生结果
无论设置如何,这在所有系统中都是一致的。
为了尊重当前的语言环境,您可以明确使用.toLocaleLowerCase
。 MDN声明:
在大多数情况下,这将产生与toLowerCase()相同的结果,但对于某些语言环境(例如土耳其语),其案例映射不遵循Unicode中的默认大小写映射,可能会有不同的结果。
答案 1 :(得分:2)
理论上有一种方法:String.localCompare()。
问题在于大多数浏览器都没有正确实现它。
使用String.toLocaleLowerCase()可能会有更多运气。
示例:
if ("Äpfel".toLocaleLowerCase() == "äpfel".toLocaleLowerCase()) alert("Case Insensitive Match")
请注意以下内容不匹配(因为ä和a是不同的字符):
if ("Äpfel".toLocaleLowerCase() == "apfel".toLocaleLowerCase()) alert("Case Insensitive Match")
答案 2 :(得分:0)
您可以使用localeCompare
但请注意,浏览器之间的实现方式不同。在Chrome / Firefox / IE11中似乎有用的是:
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>