如何在JavaScript中执行不区分大小写的字符串比较?
当前回答
我喜欢这个简短的变化-
export const equalsIgnoreCase = (str1, str2) => {
return (!str1 && !str2) || (str1 && str2 && str1.toUpperCase() == str2.toUpperCase())
}
处理速度快,而且能做它想做的事。
其他回答
甚至这个问题也已经有了答案。我有一种不同的方法来使用RegExp和match来忽略大小写敏感性。请看我的链接 https://jsfiddle.net/marchdave/7v8bd7dq/27/
$("#btnGuess").click(guessWord);
function guessWord() {
var letter = $("#guessLetter").val();
var word = 'ABC';
var pattern = RegExp(letter, 'gi'); // pattern: /a/gi
var result = word.match(pattern);
alert('Ignore case sensitive:' + result);
}
更新:
根据注释,之前的答案检查源包含关键字,使其相等检查添加了^和$。
(/^keyword$/i).test(source)
借助于正则表达式也可以实现。
(/keyword/i).test(source)
/i表示忽略大小写。如果没有必要,我们可以忽略并测试not大小写敏感匹配
(/keyword/).test(source)
记住,大小写是特定于区域设置的操作。根据具体情况,你可能需要考虑到这一点。例如,如果比较两个人的名字,可能需要考虑locale,但如果比较机器生成的值(如UUID),则可能不需要考虑locale。这就是为什么我在utils库中使用以下函数的原因(注意,出于性能原因,不包括类型检查)。
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;
}
这是这个答案的改进版本。
String.equal = function (s1, s2, ignoreCase, useLocale) {
if (s1 == null || s2 == null)
return false;
if (!ignoreCase) {
if (s1.length !== s2.length)
return false;
return s1 === s2;
}
if (useLocale) {
if (useLocale.length)
return s1.toLocaleLowerCase(useLocale) === s2.toLocaleLowerCase(useLocale)
else
return s1.toLocaleLowerCase() === s2.toLocaleLowerCase()
}
else {
if (s1.length !== s2.length)
return false;
return s1.toLowerCase() === s2.toLowerCase();
}
}
用途及测试:
字符串。equals = function (s1, s2, ignoreCase, uslocale) { If (s1 == null || s2 == null) 返回错误; if (!ignoreCase) { 如果(s1)。长度!== s2.length) 返回错误; 返回s1 === s2; } if (uslocale) { 如果(useLocale.length) return s1.toLocaleLowerCase(useLocale) === s2.toLocaleLowerCase(useLocale) 其他的 return s1.toLocaleLowerCase() === s2.toLocaleLowerCase() } 其他{ 如果(s1)。长度!== s2.length) 返回错误; return s1.toLowerCase() === s2.toLowerCase(); } } //如果你不介意扩展原型。 String.prototype.equal = function(string2, ignoreCase, uslocalale) { return String.equal(this.valueOf(), string2, ignoreCase, uslocalale); } // ------------------ 测试 ---------------------- console.log(“测试…”); console.log('区分大小写1'); var result = "Abc123".equal("Abc123"); 控制台。Assert (result === true); console.log('区分大小写2'); result = "aBC123".equal(" aBC123"); 控制台。Assert (result === false); console.log(忽略大小写); result = "AbC123"。平等(“aBc123”,真正的); 控制台。Assert (result === true); console.log('忽略大小写+当前语言环境'); result = "AbC123"。平等(“aBc123”,真正的); 控制台。Assert (result === true); console.log('土耳其语测试1(忽略大小写,en-US)'); result = "IiiI"。equal("ıiİI", true, "en-US"); 控制台。Assert (result === false); console.log('土耳其语测试2(忽略大小写,tr-TR)'); result = "IiiI"。equal("ıiİI", true, "tr-TR"); 控制台。Assert (result === true); console.log('土耳其语测试3(区分大小写,tr-TR)'); result = "IiiI"。equal("ıiİI", false, "tr-TR"); 控制台。Assert (result === false); console.log(“null-test-1”); result = "AAA".equal(null); 控制台。Assert (result === false); console.log(“null-test-2”); result =字符串。平等(null, " BBB "); 控制台。Assert (result === false); console.log(“null-test-3”); result =字符串。平等(空,空); 控制台。Assert (result === false);
我写了一个扩展。很琐碎的
if (typeof String.prototype.isEqual!= 'function') {
String.prototype.isEqual = function (str){
return this.toUpperCase()==str.toUpperCase();
};
}