如何在JavaScript中执行不区分大小写的字符串比较?
当前回答
最简单的方法(如果你不担心特殊的Unicode字符)是调用toUpperCase:
var areEqual = string1.toUpperCase() === string2.toUpperCase();
其他回答
最简单的方法(如果你不担心特殊的Unicode字符)是调用toUpperCase:
var areEqual = string1.toUpperCase() === string2.toUpperCase();
我最近创建了一个微库,提供不区分大小写的字符串助手: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
正如在最近的评论中所说,string::localeCompare支持不区分大小写的比较(以及其他强大的功能)。
这里有一个简单的例子
'xyz'.localeCompare('XyZ', undefined, { sensitivity: 'base' }); // returns 0
这是一个通用函数
function equalsIgnoringCase(text, other) {
return text.localeCompare(other, undefined, { sensitivity: 'base' }) === 0;
}
请注意,您可能应该输入正在使用的特定区域,而不是undefined。这在MDN文档中很重要
在瑞典语中,ä和a是不同的基本字母
敏感性的选择
浏览器支持
截至发稿时,UC浏览器的Android和Opera Mini不支持地区和选项参数。请登录https://caniuse.com/#search=localeCompare获取最新信息。
不区分大小写的比较有两种方式:
将字符串转换为大写,然后使用严格操作符(===)进行比较。 使用字符串方法进行模式匹配:
使用"search"字符串方法进行不区分大小写的搜索。
<!doctype html > < html > < >头 < >脚本 //第一种方式 Var a = "苹果"; var b = "苹果"; if (a.toUpperCase() === b.toUpperCase()) { alert("平等"); } / / 2路 var a = "无效"; document . write (a.search(/空/我)); > < /脚本 > < /头 < / html >
如果你知道你在处理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;
}