java字符不区分大小写_不区分大小写的字符串比较怎么办?

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

#1楼

我写了一个扩展名。 非常琐碎

if (typeof String.prototype.isEqual!= 'function') {

String.prototype.isEqual = function (str){

return this.toUpperCase()==str.toUpperCase();

};

}

#2楼

借助正则表达式,我们也可以实现。

(/keyword/i).test(source)

/i用于忽略大小写。 如果没有必要,我们可以忽略并测试不区分大小写的匹配项,例如

(/keyword/).test(source)

#3楼

请记住,大小写是特定于语言环境的操作。 根据情况,您可能需要考虑这一点。 例如,如果您要比较两个人的姓名,则可能要考虑语言环境,但如果要比较计算机生成的值(例如UUID),则可能不需要。 这就是为什么我在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;

}

#4楼

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

var areEqual = string1.toUpperCase() === string2.toUpperCase();

#5楼

编辑 :这个答案最初是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将被视为等同于á )。

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

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()因为它不能在所有语言中提供准确的不区分大小写的比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值