javascript比较字符串而不区分大小写[重复]
Posted
技术标签:
【中文标题】javascript比较字符串而不区分大小写[重复]【英文标题】:javascript compare strings without being case sensitive [duplicate] 【发布时间】:2011-06-22 14:36:03 【问题描述】:我必须使用 javascript 检查一些字符串,但区分大小写会导致问题。 例如
if('abc'=='ABC')
return true;
虽然单词的意思相同,但它不会进入 if 循环。 我也不能使用 tolower 子句,因为我不知道数据是怎么来的 例如:
if('aBc'=='abC')
return true;
如果可以通过jquery来实现的话,如何为此编写JS函数。
【问题讨论】:
已经回答的问题有很多更好的信息。我建议您(当前读者)忽略此页面 【参考方案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()
。见***.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 答案的变体。一般来说,正则表达式比其他内置方法慢。以上是关于javascript比较字符串而不区分大小写[重复]的主要内容,如果未能解决你的问题,请参考以下文章