如何在JavaScript中执行不区分大小写的字符串比较?


当前回答

不区分大小写的比较有两种方式:

将字符串转换为大写,然后使用严格操作符(===)进行比较。 使用字符串方法进行模式匹配:

使用"search"字符串方法进行不区分大小写的搜索。

<!doctype html > < html > < >头 < >脚本 //第一种方式 Var a = "苹果"; var b = "苹果"; if (a.toUpperCase() === b.toUpperCase()) { alert("平等"); } / / 2路 var a = "无效"; document . write (a.search(/空/我)); > < /脚本 > < /头 < / html >

其他回答

str = 'Lol', str2 = 'lOl', regex = new RegExp('^' + str + '$', 'i');
if (regex.test(str)) {
    console.log("true");
}

我最近创建了一个微库,提供不区分大小写的字符串助手:https://github.com/nickuraltsev/ignore-case。(它在内部使用toUpperCase)

var ignoreCase = require('ignore-case');

ignoreCase.equals('FOO', 'Foo'); // => true
ignoreCase.startsWith('foobar', 'FOO'); // => true
ignoreCase.endsWith('foobar', 'BaR'); // => true
ignoreCase.includes('AbCd', 'c'); // => true
ignoreCase.indexOf('AbCd', 'c'); // => 2

我写了一个扩展。很琐碎的

if (typeof String.prototype.isEqual!= 'function') {
    String.prototype.isEqual = function (str){
        return this.toUpperCase()==str.toUpperCase();
     };
}

将两者转换为更低的字符串(出于性能原因,只进行一次),并将它们与内联三元运算符进行比较:

function strcasecmp(s1,s2){
    s1=(s1+'').toLowerCase();
    s2=(s2+'').toLowerCase();
    return s1>s2?1:(s1<s2?-1:0);
}

编辑:这个答案最初是9年前添加的。现在你应该使用带有sensitivity: 'accent'选项的localeCompare:

函数ciEquals(a, b) { 返回typeof a === 'string' && typeof b === 'string' ? a.localeCompare(b, undefined, {sensitivity: 'accent'}) === 0 : a === b; } console.log("'a' = 'a'?", ciEquals('a', 'a')); console.log(“' AaA ' = ' AaA ' ?”,ciEquals (' AaA ', ' AaA ')); console.log("'a' = 'á'?", ciEquals('a', 'á')); console.log("'a' = 'b'?", ciEquals('a', 'b'));

{sensitivity: 'accent'}告诉localeCompare()将相同基字母的两个变体视为相同的,除非它们具有不同的重音(如上面的第三个例子)。

或者,您可以使用{sensitivity: 'base'},只要两个字符的基本字符相同,就将它们视为等效字符(因此A将被视为等效á)。

请注意,localeCompare的第三个参数在IE10或更低版本或某些移动浏览器中不受支持(请参阅上面链接页面上的兼容性图表),所以如果你需要支持这些浏览器,你将需要某种退步:

function ciEqualsInner(a, b) {
    return a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0;
}

function ciEquals(a, b) {
    if (typeof a !== 'string' || typeof b !== 'string') {
        return a === b;
    }

    //      v--- feature detection
    return ciEqualsInner('A', 'a')
        ? ciEqualsInner(a, b)
        : /*  fallback approach here  */;
}

原来的答案

在JavaScript中进行不区分大小写比较的最好方法是使用RegExp match()方法和i标志。

不区分大小写的搜索

当两个被比较的字符串都是变量(而不是常量)时,这就有点复杂了,因为你需要从字符串中生成一个RegExp,但是如果字符串中有特殊的regex字符,将字符串传递给RegExp构造函数可能会导致不正确的匹配或失败的匹配。

如果你关心国际化,不要使用toLowerCase()或toUpperCase(),因为它不能在所有语言中提供准确的不区分大小写的比较。

http://www.i18nguy.com/unicode/turkish-i18n.html