【问题标题】:javascript compare strings without being case sensitive [duplicate]javascript比较字符串而不区分大小写[重复]
【发布时间】:2011-06-22 14:36:03
【问题描述】:

我必须使用 JavaScript 检查一些字符串,但区分大小写会导致问题。 例如

if('abc'=='ABC')
{
return true;
}

虽然单词的意思相同,但它不会进入 if 循环。 我也不能使用 tolower 子句,因为我不知道数据是怎么来的 例如:

if('aBc'=='abC')
{
return true;
}

如果可以通过jquery来实现的话,如何为此编写JS函数。

【问题讨论】:

  • 已经回答的问题有很多更好的信息。我建议您(当前读者)忽略此页面

标签: javascript jquery jquery-plugins


【解决方案1】:

您可以将两个参数设置为小写,这样您将始终得到不区分大小写的搜索。

var string1 = "aBc";
var string2 = "AbC";

if (string1.toLowerCase() === string2.toLowerCase())
{
    #stuff
}

【讨论】:

  • 注意:你需要小心不加选择地将它应用到代码中,因为如果两个变量都为 null,则 string1 == string2 将返回 true,如果只有一个为 null,则返回 false。而 string1.toLowerCase() == string2.toLowerCase() 如果任一变量为空,则会抛出错误。
  • 实际上,正如已经回答的问题中所指出的,您不应使用.toLowerCase(),而应使用.toUpperCase()。见stackoverflow.com/questions/2140627/…msdn.microsoft.com/en-us/library/bb386042.aspx
  • 三个等号? ===
【解决方案2】:

试试这个...

if(string1.toLowerCase() == string2.toLowerCase()){
    return true;
}

另外,它不是一个循环,而是一个代码块。循环通常会重复(尽管它们可能只执行一次),而代码块永远不会重复。

我阅读了您关于不使用 toLowerCase 的说明,但不明白为什么会出现问题。

【讨论】:

    【解决方案3】:

    你也可以使用 string.match()。

    var string1 = "aBc";
    var match = string1.match(/AbC/i);
    
    if(match) {
    }
    

    【讨论】:

    • 是否也可以使用其他变量代替 /AbC/ 部分????
    • YeppThat'sMe: 是的,你可以这样做: var string1 = "aBc", regex = /AbC/i, match = string1.match(regex);请注意,匹配将是匹配正则表达式的字符串部分,如果正则表达式不匹配任何内容,则为 null。我将发布一个使用不同正则表达式方法的替代答案。
    • 你应该使用/^abc$/i.test("aBc"),因为在开始和结束时没有锚,它实际上是在说包含,而不是等于
    【解决方案4】:

    使用正则表达式的另一种方法(这比 Zachary 的回答更正确):

    var string1 = 'someText',
        string2 = 'SometexT',
        regex = new RegExp('^' + string1 + '$', 'i');
    
    if (regex.test(string2)) {
        return true;
    }
    

    RegExp.test() 将返回真或假。

    此外,将“^”(表示字符串的开头)添加到开头,将“$”(表示字符串的结尾)添加到末尾,确保您的正则表达式仅在“sometext”为stringToTest 中唯一的文本。如果您要查找包含正则表达式的文本,可以将其关闭。

    使用 string.toLowerCase() 方法可能更容易。

    所以... 正则表达式很强大,但只有在了解它们的工作原理后才能使用它们。当你使用你不理解的东西时,可能会发生意想不到的事情。

    有大量的正则表达式“教程”,但大多数似乎都在尝试推广某个产品。这是一个看起来不错的教程……当然,它是为使用 php 编写的,但除此之外,它似乎是一个不错的初学者教程: http://weblogtoolscollection.com/regex/regex.php

    这似乎是一个测试正则表达式的好工具: http://gskinner.com/RegExr/

    【讨论】:

    • 这个最好,即使它适用于 null,而 toUpperCase 或 toLowerCase 给出错误 - estupendo
    • 如果 string1 不是有效的正则表达式模式怎么办?例如new RegExp('^(a$', 'i')
    • @Bohdan,我鼓励你在 js 控制台中尝试这种事情。如果你这样做了,你会发现你的浏览器抛出了一个 SyntaxError,所以我认为它与这种情况无关。
    • 我发布这个答案已经有几年了。我想为后人指出,当我需要进行不区分大小写的比较时,我通常会使用 Gazler 的 toUpperCase 答案的变体。一般来说,正则表达式比其他内置方法慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2014-06-20
    • 1970-01-01
    • 2013-07-22
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多