首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何进行不区分大小写的字符串比较?

如何进行不区分大小写的字符串比较?
EN

Stack Overflow用户
提问于 2010-01-27 00:07:45
回答 23查看 1M关注 0票数 1.3K

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

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2010-01-27 00:09:24

最简单的方法(如果您不担心特殊的Unicode字符)是调用toUpperCase

代码语言:javascript
复制
var areEqual = string1.toUpperCase() === string2.toUpperCase();
票数 1.4K
EN

Stack Overflow用户

发布于 2010-01-27 00:19:24

:这个答案最初是9年前添加的。现在,您应该使用带有sensitivity: 'accent'选项的localeCompare

代码语言:javascript
复制
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将被视为与á等效)。

请注意localeCompare的第三个参数在IE10或更低版本或某些移动浏览器中不受支持(请参阅上面链接的页面上的兼容性图表),因此如果您需要支持这些浏览器,您将需要某种后备:

代码语言:javascript
复制
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()方法。

Case-insensitive search

当被比较的两个字符串都是变量(而不是常量)时,这就有点复杂了,因为您需要从字符串生成一个RegExp,但是如果字符串中包含特殊的正则表达式字符,则将字符串传递给RegExp构造函数可能会导致不正确的匹配或失败的匹配。

如果您关心国际化,那么不要使用toLowerCase()toUpperCase(),因为它们并不能在所有语言中提供准确的、不区分大小写的比较。

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

票数 289
EN

Stack Overflow用户

发布于 2018-06-24 06:36:14

正如在最近的评论中所说,string::localeCompare支持不区分大小写的比较(以及其他强大的功能)。

下面是一个简单的例子

代码语言:javascript
复制
'xyz'.localeCompare('XyZ', undefined, { sensitivity: 'base' }); // returns 0

和一个你可以使用的泛型函数

代码语言:javascript
复制
function equalsIgnoringCase(text, other) {
    return text.localeCompare(other, undefined, { sensitivity: 'base' }) === 0;
}

请注意,您可能应该输入您正在使用的特定区域设置,而不是undefined。正如MDN文档中所指出的,这一点很重要

瑞典语中的

、ä和a是单独的基本字母

敏感度选项

浏览器支持

截至发帖时,适用于Android和Opera Mini的UC浏览器不支持区域设置和选项参数。请查看https://caniuse.com/#search=localeCompare以获取最新信息。

票数 113
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2140627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档