javascript比较字符串而不区分大小写

ank*_*kur 60 javascript jquery jquery-plugins

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

if('abc'=='ABC')
{
return true;
}
Run Code Online (Sandbox Code Playgroud)

尽管单词的含义相同,但它不会进入if循环.我也不能使用tolower条款,因为我不知道数据如何来它对于ex意味着:

if('aBc'=='abC')
{
return true;
}
Run Code Online (Sandbox Code Playgroud)

如果可以通过jquery完成,如何为此编写JS函数.

Gaz*_*ler 117

您可以将两个参数都设置为小写,这样您将始终以不区分大小写的搜索结束.

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

if (string1.toLowerCase() === string2.toLowerCase())
{
    #stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,正如已经回答的问题所指出的,你不应该使用`.toLowerCase()`而是`.toUpperCase()`.请参阅http://stackoverflow.com/questions/2140627/javascript-case-insensitive-string-comparison以及http://msdn.microsoft.com/en-us/library/bb386042.aspx (6认同)
  • 注意:你需要注意不加选择地将它应用于代码,因为string1 == string2如果两个变量都为null则返回true,如果只有一个为null则返回false.而如果任一变量为null,string1.toLowerCase()== string2.toLowerCase()将抛出错误. (2认同)

Akr*_*kos 18

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

var string1 = 'someText',
    string2 = 'SometexT',
    regex = new RegExp('^' + string1 + '$', 'i');

if (regex.test(string2)) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

RegExp.test()将返回true或false.

此外,将'^'(表示字符串的开头)添加到开头并将'$'(表示字符串的结尾)添加到结尾,确保只有'sometext'是唯一的文本时,正则表达式才会匹配在stringToTest中.如果您正在查找包含正则表达式的文本,则可以将其保留为关闭状态.

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

所以......正则表达式很强大,但是只有了解它们的工作原理才能使用它们.当您使用不理解的东西时,会发生意外的事情.

有大量的正则表达式'教程',但大多数似乎试图推动某个产品.这看起来像是一个体面的教程...被授予,它是为使用PHP编写的,但除此之外,它似乎是一个不错的初学者教程:http: //weblogtoolscollection.com/regex/regex.php

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

  • 我发布这个答案已经有几年了.我想为后人注意,当我需要进行不区分大小写的比较时,我通常会使用Gazler的toUpperCase答案的变体.通常,正则表达式比其他内置方法慢. (2认同)

Zac*_*ary 9

您也可以使用string.match().

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

if(match) {
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该使用`/^abc$/i.test("aBc")`因为在开始和结束时没有锚,它真的说**包含**,而不是**等于**. (5认同)

bel*_*bob 5

尝试这个...

if(string1.toLowerCase() == string2.toLowerCase()){
    return true;
}
Run Code Online (Sandbox Code Playgroud)

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

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