如果之前已经问过这个确切的问题,请指出相关问题。
tl;dr:如何在 JavaScript 中比较两个字符串,同时根据英文规则忽略大小写?
我的代码分析和比较了来自两个不同来源的数据,每个来源对关键字应该是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较。但是,我不希望该系统在用于其他文化(例如土耳其及其与字母 I 的臭名昭著的问题)中使用时破坏。
JavaScript 是否有任何方法可以进行与文化无关的(阅读:英语)不区分大小写的字符串比较?
如果之前已经问过这个确切的问题,请指出相关问题。
tl;dr:如何在 JavaScript 中比较两个字符串,同时根据英文规则忽略大小写?
我的代码分析和比较了来自两个不同来源的数据,每个来源对关键字应该是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较。但是,我不希望该系统在用于其他文化(例如土耳其及其与字母 I 的臭名昭著的问题)中使用时破坏。
JavaScript 是否有任何方法可以进行与文化无关的(阅读:英语)不区分大小写的字符串比较?
如果在其他文化中使用(例如土耳其及其字母 I 的臭名昭著的问题),如何比较 JavaScript 中的两个字符串而不会中断?JavaScript 是否有任何方法可以进行与文化无关的、不区分大小写的字符串比较?
是的,只需使用不受区域设置影响的标准.toLowerCase
方法即可。很好。该规范甚至要求:a.toLowerCase() == b.toLowerCase()
必须根据 Unicode 字符数据库中的大小写映射得出结果
这在所有系统中绝对是一致的,无论它们的设置如何。
为了尊重当前的语言环境,您将.toLocaleLowerCase
明确使用。MDN 声明:
在大多数情况下,这将产生与 toLowerCase() 相同的结果,但对于某些语言环境,例如土耳其语,其大小写映射不遵循 Unicode 中的默认大小写映射,可能会产生不同的结果。
但是,依赖语言环境似乎效果不佳……</p>
理论上有一种方法: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 中似乎有效的是:
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>