如何在JavaScript中执行不区分大小写的字符串比较? html
我写了一个扩展名。 很是琐碎 正则表达式
if (typeof String.prototype.isEqual!= 'function') { String.prototype.isEqual = function (str){ return this.toUpperCase()==str.toUpperCase(); }; }
借助正则表达式,咱们也能够实现。 浏览器
(/keyword/i).test(source)
/i
用于忽略大小写。 若是没有必要,咱们能够忽略并测试不区分大小写的匹配项,例如 app
(/keyword/).test(source)
请记住,大小写是特定于语言环境的操做。 根据状况,您可能须要考虑这一点。 例如,若是您要比较两我的的姓名,则可能要考虑语言环境,但若是要比较计算机生成的值(例如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; }
最简单的方法(若是您不担忧特殊的Unicode字符)是调用toUpperCase
: 函数
var areEqual = string1.toUpperCase() === string2.toUpperCase();
编辑 :这个答案最初是9年前添加的。 今天,您应该将localeCompare
与sensitivity: '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()
由于它不能在全部语言中提供准确的不区分大小写的比较。