11

如果之前已经问过这个确切的问题,请指出相关问题。

tl;dr:如何在 JavaScript 中比较两个字符串,同时根据英文规则忽略大小写?

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

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

4

3 回答 3

12

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

是的,只需使用不受区域设置影响的标准.toLowerCase方法即可。很好。该规范甚至要求:a.toLowerCase() == b.toLowerCase()

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

这在所有系统中绝对是一致的,无论它们的设置如何。


为了尊重当前的语言环境,您将.toLocaleLowerCase明确使用。MDN 声明:

在大多数情况下,这将产生与 toLowerCase() 相同的结果,但对于某些语言环境,例如土耳其语,其大小写映射不遵循 Unicode 中的默认大小写映射,可能会产生不同的结果。

但是,依赖语言环境似乎效果不佳……</p>

于 2014-01-15T04:32:41.787 回答
2

理论上有一种方法:String.localCompare()

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

使用String.toLocaleLowerCase()可能会更幸运。

例子:

if ("Äpfel".toLocaleLowerCase() == "äpfel".toLocaleLowerCase()) alert("Case Insensitive Match")

请注意,以下内容将不匹配(因为 ä 和 a 是不同的字符):

if ("Äpfel".toLocaleLowerCase() == "apfel".toLocaleLowerCase()) alert("Case Insensitive Match")
于 2014-01-06T17:59:57.953 回答
1

您可以使用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>

于 2016-03-17T20:36:47.760 回答