不区分大小写的字符串比较怎么办?

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


#1楼

我写了一个扩展名。 很是琐碎 正则表达式

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

#2楼

借助正则表达式,咱们也能够实现。 浏览器

(/keyword/i).test(source)

/i用于忽略大小写。 若是没有必要,咱们能够忽略并测试不区分大小写的匹配项,例如 app

(/keyword/).test(source)

#3楼

请记住,大小写是特定于语言环境的操做。 根据状况,您可能须要考虑这一点。 例如,若是您要比较两我的的姓名,则可能要考虑语言环境,但若是要比较计算机生成的值(例如UUID),则可能不须要。 这就是为何我在utils库中使用如下函数的缘由(请注意,出于性能缘由不包括类型检查)。 ide

function compareStrings (string1, string2, ignoreCase, useLocale) {
    if (ignoreCase) {
        if (useLocale) {
            string1 = string1.toLocaleLowerCase();
            string2 = string2.toLocaleLowerCase();
        }
        else {
            string1 = string1.toLowerCase();
            string2 = string2.toLowerCase();
        }
    }

    return string1 === string2;
}

#4楼

最简单的方法(若是您不担忧特殊的Unicode字符)是调用toUpperCase函数

var areEqual = string1.toUpperCase() === string2.toUpperCase();

#5楼

编辑 :这个答案最初是9年前添加的。 今天,您应该将localeComparesensitivity: 'accent'选项结合使用: 性能

function ciEquals(a, b) { return 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将被视为等同于á )。 this

请注意 ,在IE10或更低版本或某些移动浏览器中,不支持localeCompare的第三个参数(请参见上面连接的页面上的兼容性图表),所以,若是须要支持这些浏览器,则须要某种后备: spa

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中进行不区分大小写的比较的最佳方法是使用带有i标志的RegExp match()方法。

不区分大小写的搜索

当两个被比较的字符串都是变量(不是常量)时,这会稍微复杂一点,由于您须要从字符串生成RegExp,可是若是字符串具备特殊的regex,则将字符串传递给RegExp构造函数可能会致使不正确的匹配或失败的匹配里面的字符。

若是您关心国际化,请不要使用toLowerCase()toUpperCase()由于它不能在全部语言中提供准确的不区分大小写的比较。

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

相关文章
相关标签/搜索