文档章节

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

j
 javail
发布于 2019/12/14 17:56
字数 761
阅读 64
收藏 0

如何在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年前添加的。 今天,您应该将localeComparesensitivity: '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()因为它不能在所有语言中提供准确的不区分大小写的比较。

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

本文转载自:https://th.sofbug.com/question/8ysF

j
粉丝 5
博文 1063
码字总数 0
作品 0
深圳
私信 提问
oracle中的单引号

1) oracle中单引号作用是声明为类字符串,且不区分大小写(pl sql 查询语句也不区分大小写) 2) 引号当中还有单引号怎么办? 需要用两个单引号代表一个: ‘’‘要表示成=’‘’‘ 3) 双引...

chworld
2015/09/25
66
0
php字符串处理函数大全

addcslashes — 为字符串里面的部分字符添加反斜线转义字符 addslashes — 用指定的方式对字符串里面的字符进行转义 bin2hex — 将二进制数据转换成十六进制表示 chop — rtrim() 的别名函数...

Allen
2016/04/13
98
0
PHP_常用字符串处理函数_简介

addcslashes — 为字符串里面的部分字符添加反斜线转义字符 addslashes — 用指定的方式对字符串里面的字符进行转义 bin2hex — 将二进制数据转换成十六进制表示 chop — rtrim() 的别名函数...

喵王不瞌睡
2014/04/26
79
0
php 字符串常用方法

1.判断一个字符串的长度:int strlen(string $string) 判断一个中文字符串长度 mb_strlen() 判断一盒字符串由多少个单词组成(通常以空格划分单词)strwordcount() 2.字符串截取和查找 从字...

阿法
2018/01/31
25
0
Swift3.0语言教程比较、判断字符串

Swift3.0语言教程比较、判断字符串 Swift3.0语言教程比较、判断字符串,在一个程序中字符串很多时,常常会做的操作就是对这些字符串进行比较和判断。本小节将讲解这些内容。 1.不区分大小写比...

大学霸
2016/11/11
101
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring基础

主要用于service层; 轻量级java开发框架; 各层 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis , jdbcTemplate --> spring-data Spring核心:控制反转IOC 切面编...

七宝1
19分钟前
19
0
解决overflow+border-radius+transform圆角问题

网上还有其他版本,但是对我来说都不好使,下面是我在Chrome上的代码。overflow:hidden依然是不能正常使用,换成unset就可以,读者如果有更好的解决方案,请留言,谢谢。 <figure> <img...

hi懒喵
24分钟前
39
0
《C语言》—— 数组

书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。——高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!...

龙跃十二
37分钟前
60
0
Java小案例: 1000以内的水仙花数

要求在控制台分别展示1000以内的水仙花数。 如下:↓ 水仙花数规则: 水仙花数至少是一个3位数 每位数字的立方数的累加和,正好等于该数字本身。 例如:153就是一个水仙花数。每位数字分别...

漫路h
昨天
66
0
centos 防火墙端口设置

查看开放的端口号 firewall-cmd --lists-all 设置开放的端口号 firewall-cmd --add-service=http --permanent 1. //--permanent表示永久生效,不加这个参数的话只会针对本次执行完命令生效,重...

ACE_LCX
昨天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部