var haystack = "A. BAIL. Of. Hay.";
var needle = "bail.";
var needleRegExp = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i");
var result = needleRegExp.test(haystack);
if (result) {
// Your code here
}
<!doctype html>
<html>
<head>
<script>
// 1st way
var a = "apple";
var b = "APPLE";
if (a.toUpperCase() === b.toUpperCase()) {
alert("equal");
}
//2nd way
var a = " Null and void";
document.write(a.search(/null/i));
</script>
</head>
</html>
var a = "hello";
var b = "HeLLo";
var c = "world";
if (a.equalIgnoreCase(b)) {
document.write("a == b");
}
if (a.equalIgnoreCase(c)) {
document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
document.write("b != c");
}
输出将是:
"a == b"
"b != c"
String.prototype.equalIgnoreCase = function(str) {
return (str != null &&
typeof str === 'string' &&
this.toUpperCase() === str.toUpperCase());
}
var a = "hello";
var b = "HeLLo";
var c = "world";
if (a.equalIgnoreCase(b)) {
document.write("a == b");
document.write("<br>");
}
if (a.equalIgnoreCase(c)) {
document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
document.write("b != c");
}
9
str = 'Lol', str2 = 'lOl', regex = new RegExp('^' + str + '$', 'i');
if (regex.test(str)) {
console.log("true");
}
$("#btnGuess").click(guessWord);
function guessWord() {
var letter = $("#guessLetter").val();
var word = 'ABC';
var pattern = RegExp(letter, 'gi'); // pattern: /a/gi
var result = word.match(pattern);
alert('Ignore case sensitive:' + result);
}
18 回答
最简单的方法(如果你不担心特殊的Unicode字符)是调用
toUpperCase
:EDIT :这个答案是7岁 . 今天你应该使用localeCompare .
原始答案
在JavaScript中进行不区分大小写的比较的最佳方法是使用RegExp match()方法和'i'标志 .
JavaScript: case-insensitive search
当比较的两个字符串都是变量(不是常量)时,它会有点复杂'因为你需要从字符串生成一个RegExp但是将字符串传递给RegExp构造函数会导致错误的匹配或失败的匹配如果字符串有特殊的正则表达式其中的人物 .
如果您关心国际化,请不要使用toLowerCase()或toUpperCase(),因为它不能在所有语言中提供准确的不区分大小写的比较 .
http://www.i18nguy.com/unicode/turkish-i18n.html
在正则表达式的帮助下我们也可以实现 .
/i
用于忽略大小写 . 如果没有必要,我们可以忽略并测试NOT区分大小写的匹配请记住,大小写是特定于语言环境的操作 . 根据具体情况,您可能希望将其纳入帐户 . 例如,如果要比较两个人的名字,可能需要考虑区域设置,但如果要比较机器生成的值(如UUID),则可能不会 . 这就是为什么我在我的utils库中使用以下函数(请注意,出于性能原因,不包括类型检查) .
如果你担心不等式的方向(也许你想要对列表进行排序),你几乎必须进行大小写转换,因为unicode中的小写字符比大写toLowerCase更多可能是最好的转换 .
Javascript似乎使用区域设置“C”进行字符串比较,因此如果字符串包含非ASCII字母,则生成的顺序将是丑陋的 . 如果不对字符串进行更详细的检查,就没有太多可以做的事情 .
我最近创建了一个提供不区分大小写的字符串帮助程序的微库:https://github.com/nickuraltsev/ignore-case . (它在内部使用
toUpperCase
. )正如最近的评论所说,string::localCompare支持不区分大小写的比较(以及其他强大的东西) .
这是一个简单的例子
还有一个你可以使用的通用功能
请注意,您应该输入您正在使用的特定区域设置,而不是
undefined
. 这很重要,如MDN文档中所述灵敏度选项
浏览器支持
截至发布时,UC浏览器Android和Opera Mini不支持区域设置和选项参数 . 请查看https://caniuse.com/#search=localeCompare以获取最新信息 .
假设我们想在字符串变量
haystack
中找到字符串变量needle
. 有三个问题:国际化应用程序应避免
string.toUpperCase
和string.toLowerCase
. 使用忽略大小写的正则表达式 . 例如,var needleRegExp = new RegExp(needle, "i");
后跟needleRegExp.test(haystack)
.通常,您可能不知道
needle
的值 . 请注意needle
不包含任何正则表达式special characters . 使用needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
来逃避这些 .在其他情况下,如果要精确匹配
needle
和haystack
,只需忽略大小写,请确保在开头添加"^"
,在正则表达式构造函数末尾添加"$"
.考虑点(1)和(2),一个例子是:
有两种不区分大小写的比较方法:
将字符串转换为大写,然后使用strict运算符(
===
)对它们进行比较 . 操作员如何严格阅读操作数:http://www.thesstech.com/javascript/relational-logical-operators使用字符串方法匹配模式:
使用"search"字符串方法进行不区分大小写的搜索 . 阅读有关搜索和其他字符串方法的信息:http://www.thesstech.com/pattern-matching-using-string-methods
这里有很多答案,但我想添加一个基于扩展String lib的sollution:
这样你可以像在Java中一样使用它!
例:
输出将是:
即使这个问题已经回答了 . 我有一个不同的方法来使用RegExp和匹配来忽略区分大小写 . 请看我的链接https://jsfiddle.net/marchdave/7v8bd7dq/27/
如何不抛出异常而不使用慢速正则表达式?
如果任一字符串为null或未定义,上面的代码段假定您不希望匹配 .
如果要匹配null / undefined,则:
如果由于某种原因你关心undefined vs null:
使用regix进行字符串匹配或比较,
in javaScript , you can use match() for string comparison , dont forget to put i in regix
例子:
我写了一个扩展名 . 很琐碎
由于没有答案清楚地提供了使用
RegExp
的简单代码片段,这里是我的尝试:它有几个优点:
验证参数类型(任何非字符串参数,例如
undefined
,都会使表达式崩溃,如str1.toUpperCase()
) .不受可能的国际化问题的影响 .
转义
RegExp
字符串 .如果两个字符串具有相同的已知语言环境,则可能需要使用Intl.Collator对象,如下所示:
显然,您可能希望缓存
Collator
以获得更高的效率 .这种方法的优点是它应该比使用RegExps快得多,并且基于一组非常可定制的(参见上面文章中的
locales
和options
构造函数参数的描述)一套即用型整理器 .这是this answer的 improved version .
Usages & tests: