JavaScript:与区域性无关的不区分大小写的字符串比较

JavaScript:与区域性无关的不区分大小写的字符串比较,javascript,string-comparison,culture,Javascript,String Comparison,Culture,如果以前有人问过这个问题,请告诉我相关的问题 tl;dr:根据英语规则,在忽略大小写的情况下,如何比较JavaScript中的两个字符串 我的代码分析和比较来自两个不同来源的数据,每个来源对关键字应该是大写还是小写有不同的意见,这意味着需要进行不区分大小写的比较。然而,我不希望在其他文化中使用这个系统(比如土耳其和它臭名昭著的字母I问题) JavaScript是否有任何方法可以进行与区域性无关(读:英语)的不区分大小写的字符串比较?理论上有一种方法可以做到这一点: 问题是大多数浏览器都没有正确地

如果以前有人问过这个问题,请告诉我相关的问题

tl;dr:根据英语规则,在忽略大小写的情况下,如何比较JavaScript中的两个字符串

我的代码分析和比较来自两个不同来源的数据,每个来源对关键字应该是大写还是小写有不同的意见,这意味着需要进行不区分大小写的比较。然而,我不希望在其他文化中使用这个系统(比如土耳其和它臭名昭著的字母I问题)


JavaScript是否有任何方法可以进行与区域性无关(读:英语)的不区分大小写的字符串比较?

理论上有一种方法可以做到这一点:

问题是大多数浏览器都没有正确地实现它

你可能会有更多的运气使用

例如:

if ("Äpfel".toLocaleLowerCase() == "äpfel".toLocaleLowerCase()) alert("Case Insensitive Match")
请注意以下内容不匹配(因为ä和a是不同的字符):

如果在其他文化中使用(比如土耳其和它臭名昭著的字母I问题),如何在不中断的情况下比较JavaScript中的两个字符串?JavaScript是否有任何方法可以进行与区域性无关的不区分大小写的字符串比较

是的,只需使用不受区域设置影响的
a.toLowerCase()==b.toLowerCase()
非常好。委员会的任务是:

结果必须根据Unicode字符数据库中的大小写映射派生

无论设置如何,这在所有系统中都是一致的


为了尊重当前区域设置,您将显式使用。MDN指出:

在大多数情况下,这将产生与toLowerCase()相同的结果,但对于某些区域设置(如Turkish),其大小写映射不遵循Unicode中的默认大小写映射,可能会产生不同的结果


但是,

您可以使用
localeCompare
,但请注意,不同浏览器的实现方式不同。在Chrome/Firefox/IE11中似乎起作用的是:

first.localeCompare("First", navigator.language, { sensitivity: "base" }) === 0
var console=function(){
变量日志=函数(消息){
strMessage=“”+消息+”

”; $(“#控制台”).append(strMessage); }; 返回{ 日志:日志 }; }() var first=“first”; var result=first.localeCompare(“first”,navigator.language,{sensitivity:“base”})==0; 控制台日志(结果)


您的意思是,您只想比较A-Z/A-Z不区分大小写,而其他所有内容都区分大小写?为什么你把“根据英语规则”称为“文化独立”呢?听起来理论上是不可能的。比如说,你想如何以“文化独立”的不区分大小写的方式来比较德语?或者是法语,在法语中重音字母的大写字母失去了重音,或者是其他语言没有。我认为,案例的整个概念都依赖于语言。@Bergi@RemcoGerlich:也许我对术语的选择不好。通过“文化独立”,我并不是说英语是一种“中立”的文化。相反,我要求的是一种以不区分大小写的方式比较两个字符串的方法,这种方式在不同地区的计算机之间保持一致。例如,我想确保世界上每台计算机上的
EXIT
都被视为等同于
EXIT
,包括设置为土耳其语的计算机,其中字母I的大写规则不同。
first.localeCompare("First", navigator.language, { sensitivity: "base" }) === 0