如何在JavaScript中执行不区分大小写的字符串比较?
当前回答
更新:
根据注释,之前的答案检查源包含关键字,使其相等检查添加了^和$。
(/^keyword$/i).test(source)
借助于正则表达式也可以实现。
(/keyword/i).test(source)
/i表示忽略大小写。如果没有必要,我们可以忽略并测试not大小写敏感匹配
(/keyword/).test(source)
其他回答
更新:
根据注释,之前的答案检查源包含关键字,使其相等检查添加了^和$。
(/^keyword$/i).test(source)
借助于正则表达式也可以实现。
(/keyword/i).test(source)
/i表示忽略大小写。如果没有必要,我们可以忽略并测试not大小写敏感匹配
(/keyword/).test(source)
如果你知道你在处理ascii文本,那么你可以只使用大写/小写字符偏移量比较。
只要确保你的“完美”字符串(你想匹配的字符串)是小写的:
const CHARS_IN_BETWEEN = 32;
const LAST_UPPERCASE_CHAR = 90; // Z
function strMatchesIgnoreCase(lowercaseMatch, value) {
let i = 0, matches = lowercaseMatch.length === value.length;
while (matches && i < lowercaseMatch.length) {
const a = lowercaseMatch.charCodeAt(i);
const A = a - CHARS_IN_BETWEEN;
const b = value.charCodeAt(i);
const B = b + ((b > LAST_UPPERCASE_CHAR) ? -CHARS_IN_BETWEEN : CHARS_IN_BETWEEN);
matches = a === b // lowerA === b
|| A === b // upperA == b
|| a === B // lowerA == ~b
|| A === B; // upperA == ~b
i++;
}
return matches;
}
我写了一个扩展。很琐碎的
if (typeof String.prototype.isEqual!= 'function') {
String.prototype.isEqual = function (str){
return this.toUpperCase()==str.toUpperCase();
};
}
使用RegEx进行字符串匹配或比较。
在JavaScript中,你可以使用match()进行字符串比较, 别忘了把I放到正则表达式里。该标志将强制进行不区分大小写的测试。
例子:
为了确认任何情况下的字符串测试都包含在matchString变量内的任何位置
var matchString = "Test";
if (matchString.match(/test/i)) {
alert('matchString contains the substring "test" case insensitive');
}
else {
alert('matchString does not contain the substring "test" case insensitive');
}
要确认matchString变量只包含任何情况下的test,而不包含其他字符,则在正则表达式中使用零宽度断言^和$。这些将要求test分别直接出现在字符串的开始之后和字符串的结束之前。
var matchString = "Test";
if (matchString.match(/^test$/i)) {
alert('matchString equals "test" case insensitive');
}
else {
alert('matchString does not equal "test" case insensitive');
}
甚至这个问题也已经有了答案。我有一种不同的方法来使用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);
}