SLa*_*aks 1081
最简单的方法(如果你不担心特殊的Unicode字符)是调用toUpperCase:
var areEqual = string1.toUpperCase() === string2.toUpperCase();
Run Code Online (Sandbox Code Playgroud)
Sam*_*eff 182
编辑:这个答案最初是在9年前添加的.今天,你应该使用localeCompare与sensitivity: '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'));Run Code Online (Sandbox Code Playgroud)
将{ sensitivity: 'accent' }告诉localeCompare()治疗相同基础函作为相同的两个变体,除非以上它们具有不同的重音符号(如在第三示例).
或者,您可以使用{ sensitivity: 'base' },只要它们的基本字符相同(A将被视为等效á),将两个字符视为等效字符.
请注意,localeCompareIE10或更低版本或某些移动浏览器不支持第三个参数(请参阅上面链接的页面上的兼容性图表),因此如果您需要支持这些浏览器,则需要某种后备:
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 */;
}
Run Code Online (Sandbox Code Playgroud)
原始答案
在JavaScript中进行不区分大小写的比较的最佳方法是使用RegExp match()方法和i标志.
当比较的两个字符串都是变量(不是常量)时,它会有点复杂'因为你需要从字符串生成一个RegExp但是将字符串传递给RegExp构造函数会导致错误的匹配或者如果字符串有特殊的正则表达式则匹配失败其中的人物.
如果您关心国际化,请不要使用toLowerCase()或toUpperCase()因为它不能在所有语言中提供准确的不区分大小写的比较.
http://www.i18nguy.com/unicode/turkish-i18n.html
SP0*_*007 32
在正则表达式的帮助下我们也可以实现.
(/keyword/i).test(source)
Run Code Online (Sandbox Code Playgroud)
/i是为了忽略大小写.如果没有必要,我们可以忽略并测试非区分大小写的匹配
(/keyword/).test(source)
Run Code Online (Sandbox Code Playgroud)
jay*_*jay 28
正如最近的评论所说,string::localCompare支持不区分大小写的比较(以及其他强大的东西).
这是一个简单的例子
'xyz'.localeCompare('XyZ', undefined, { sensitivity: 'base' }); // returns 0
Run Code Online (Sandbox Code Playgroud)
还有一个你可以使用的通用功能
function equalsIgnoringCase(text, other) {
return text.localeCompare(other, undefined, { sensitivity: 'base' }) === 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,undefined您应该输入您正在使用的特定区域设置,而不是您.这很重要,如MDN文档中所述
瑞典语,ä和a是单独的基本字母
截至发布时,Android浏览器和Opera Mini 不支持区域设置和选项参数.请查看https://caniuse.com/#search=localeCompare以获取最新信息.
Shi*_*hah 26
请记住,大小写是特定于语言环境的操作.根据具体情况,您可能希望将其纳入帐户.例如,如果要比较两个人的名字,可能需要考虑区域设置,但如果要比较机器生成的值(如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;
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*sev 13
我最近创建了一个提供不区分大小写的字符串帮助程序的微库:https://github.com/nickuraltsev/ignore-case.(它在toUpperCase内部使用.)
var ignoreCase = require('ignore-case');
ignoreCase.equals('FOO', 'Foo'); // => true
ignoreCase.startsWith('foobar', 'FOO'); // => true
ignoreCase.endsWith('foobar', 'BaR'); // => true
ignoreCase.includes('AbCd', 'c'); // => true
ignoreCase.indexOf('AbCd', 'c'); // => 2
Run Code Online (Sandbox Code Playgroud)
Jas*_*sen 11
如果你担心不等式的方向(也许你想要对列表进行排序),你几乎必须进行大小写转换,因为unicode中的小写字符比大写toLowerCase更多可能是最好的转换.
function my_strcasecmp( a, b )
{
if((a+'').toLowerCase() > (b+'').toLowerCase()) return 1
if((a+'').toLowerCase() < (b+'').toLowerCase()) return -1
return 0
}
Run Code Online (Sandbox Code Playgroud)
Javascript似乎使用区域设置"C"进行字符串比较,因此如果字符串包含非ASCII字母,则生成的顺序将是丑陋的.如果不对字符串进行更详细的检查,就没有太多可以做的.
假设我们想在字符串变量needle中找到字符串变量haystack.有三个问题:
string.toUpperCase和string.toLowerCase.使用忽略大小写的正则表达式.例如,var needleRegExp = new RegExp(needle, "i");接下来是needleRegExp.test(haystack).needle.请注意,needle不包含任何正则表达式特殊字符.逃避这些使用needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");.needle并且haystack只是忽略大小写,请确保"^"在"$"正则表达式构造函数的开头和结尾添加.考虑点(1)和(2),一个例子是:
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
}
Run Code Online (Sandbox Code Playgroud)
这里有很多答案,但我喜欢添加基于扩展字符串库的解决方案:
String.prototype.equalIgnoreCase = function(str)
{
return (str != null
&& typeof str === 'string'
&& this.toUpperCase() === str.toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以像在 Java 中一样使用它!
例子:
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");
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
"a == b"
"b != c"
Run Code Online (Sandbox Code Playgroud)
String.prototype.equalIgnoreCase = function(str)
{
return (str != null
&& typeof str === 'string'
&& this.toUpperCase() === str.toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)
小智 6
使用 RegEx 进行字符串匹配或比较。
在 JavaScript 中,可以match()用于字符串比较,不要忘记放入iRegEx。
例子:
var matchString = "Test";
if (matchString.match(/test/i)) {
alert('String matched');
}
else {
alert('String not matched');
}
Run Code Online (Sandbox Code Playgroud)
如果两个字符串具有相同的已知区域设置,您可能需要使用Intl.Collator如下对象:
function equalIgnoreCase(s1: string, s2: string) {
return new Intl.Collator("en-US", { sensitivity: "base" }).compare(s1, s2) === 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,您可能希望缓存Collator以提高效率。
这种方法的优点是它比使用 RegExp 快得多,并且基于高度可定制的(请参阅上面文章中的构造函数参数的描述locales)options一组即用型整理器。
小智 5
不区分大小写的比较有两种方式:
===)进行比较。严格运算符如何处理操作数读取内容:http :
//www.thesstech.com/javascript/relational-logical-operators使用“搜索”字符串方法进行不区分大小写的搜索。阅读有关搜索和其他字符串方法的信息:http : //www.thesstech.com/pattern-matching-using-string-methods
<!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>
Run Code Online (Sandbox Code Playgroud)
我喜欢这种快速速记变化 -
export const equalsIgnoreCase = (str1, str2) => {
return (!str1 && !str2) || (str1 && str2 && str1.toUpperCase() == str2.toUpperCase())
}
Run Code Online (Sandbox Code Playgroud)
处理速度快,并且能达到预期的效果。
| 归档时间: |
|
| 查看次数: |
713247 次 |
| 最近记录: |