包含不区分大小写

Nat*_*Pet 386 javascript string case-sensitive case-insensitive

我有以下内容:

if (referrer.indexOf("Ral") == -1) { ... }
Run Code Online (Sandbox Code Playgroud)

我喜欢做的事情就是让Ral不区分大小写,因此,它可以是RAl,rAl等,仍然匹配.

有没有办法说Ral必须不区分大小写?

Rob*_*b W 574

.toLowerCase()之后添加referrer.此方法将字符串转换为小写字符串.然后,使用.indexOf()使用ral代替Ral.

if (referrer.toLowerCase().indexOf("ral") === -1) { 
Run Code Online (Sandbox Code Playgroud)

使用正则表达式也可以实现相同的功能(当您想要针对动态模式进行测试时尤其有用):

if (!/Ral/i.test(referrer)) {
   //    ^i = Ignore case flag for RegExp
Run Code Online (Sandbox Code Playgroud)

  • 对土耳其语来说,最好使用`toLocaleLowerCase()`([ref](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase)) (22认同)
  • 后一种方法更正确; 对于土耳其语I和任何其他有问题的大写/小写对,前者将失败:http://www.i18nguy.com/unicode/turkish-i18n.html (15认同)
  • @Maslow问题的例子是关于测试不区分大小写.如果要获取索引,请使用[String的`.search`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search)方法:`var index = referrer.search(/ Ral/i);` (10认同)
  • 动态正则表达式方法的附加复杂性是,如果搜索字符串(例如"Ral")包含正则表达式特殊字符,例如$.*?等等,你有问题,所以你需要逃避特殊角色,请参阅Mike Samuel在这篇文章中的回答:[endsWith in JavaScript](http://stackoverflow.com/questions/280634/endswith-in-javascript ) (5认同)
  • 正如其他地方的其他人指出的那样,最好使用 toUpperCase()。请参阅 http://msdn.microsoft.com/en-us/library/bb386042.aspx (3认同)
  • 后者没有回答这个问题,它只说如果它存在,则不会得到匹配的索引.问题标题是错误的,还是问题. (2认同)

Kfi*_*rez 88

另一种选择是使用搜索方法如下:

if (referrer.search(new RegExp("Ral", "i")) == -1) { ...
Run Code Online (Sandbox Code Playgroud)

它看起来更优雅然后将整个字符串转换为小写,它可能更有效.
由于toLowerCase()代码有两个遍历字符串,一个遍在整个字符串上以将其转换为小写,另一个是寻找所需的索引.
RegExp该代码具有一个通过其它看起来以匹配所需索引的字符串.

因此,在长字符串上我建议使用该RegExp版本(我想在短字符串上,这个效率来自于创建RegExp对象的帐户)

  • 截至2018.10.24,toLowerCase在Chrome中大幅增加.toLowerCase(95,914,378 - ±0.89% - 最快),正则表达式指数(269,307 - ±0.87%100%慢) (5认同)
  • 根据我的测试,这也快得多:http://jsperf.com/case-insensitive-indexof (2认同)
  • 对于性能极客来说,使用相同的基准在我的机器上使用“RegExp.test”速度更快。所以在这个例子中: `(new RegExp('Ral', 'i')).test(referrer)` (2认同)

gil*_*ly3 19

使用RegExp:

if (!/ral/i.test(referrer)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,使用.toLowerCase():

if (referrer.toLowerCase().indexOf("ral") == -1)
Run Code Online (Sandbox Code Playgroud)


che*_*ken 10

这里有几种方法.

如果要对此实例执行不区分大小写的检查,请执行以下操作.

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
    ...
Run Code Online (Sandbox Code Playgroud)

或者,如果您定期执行此检查,则可以添加一个indexOf()类似于new 的方法String,但要使其不区分大小写.

String.prototype.indexOfInsensitive = function (s, b) {
    return this.toLowerCase().indexOf(s.toLowerCase(), b);
}

// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
Run Code Online (Sandbox Code Playgroud)


小智 10

从ES2016开始,您还可以使用更好/更简单/更优雅的方法:

if (referrer.includes("Ral")) { ... }
Run Code Online (Sandbox Code Playgroud)

要么

if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }
Run Code Online (Sandbox Code Playgroud)

以下是.indexOf()和的比较.includes():https: //dev.to/adroitcoder/includes-vs-indexof-in-javascript

  • 我认为 include 不区分大小写 (2认同)
  • @Kyles`includes`在Chrome中是“区分大小写”的:尝试`'fooBar'.includes('bar')`==>`false` (2认同)
  • 包含区分大小写。但是,我们将两者都设为小写。所以,这将是一场比赛。`'fooBar'.toLowerCase().includes('bar'.toLowerCase())` ==> `true` (2认同)

Bak*_*sra 8

你可以试试这个

str = "Wow its so COOL"
searchStr = "CoOl"

console.log(str.toLowerCase().includes(searchStr.toLowerCase()))
Run Code Online (Sandbox Code Playgroud)


Vee*_*eeK 7

以下是 ES6 中的选项,按性能降序排列

包括

if (referrer.toLowerCase().includes("Ral".toLowerCase())) { ... }
Run Code Online (Sandbox Code Playgroud)

IndexOf(有时会给出与 Includes 相似或更好的结果)

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) !== -1) { ... }
Run Code Online (Sandbox Code Playgroud)

匹配

if (referrer.match(new RegExp("Ral", 'i'))) { ... }
Run Code Online (Sandbox Code Playgroud)

基准测试结果: https: //jsben.ch/IBbnl


ale*_*511 6

任何语言的示例:

\n\n
'My name is \xd0\xa5\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xbe\xd1\x80'.toLocaleLowerCase().includes('\xd0\xa5\xd0\xb2\xd0\x95\xd0\xb4\xd0\x9e\xd1\x80'.toLocaleLowerCase())\n
Run Code Online (Sandbox Code Playgroud)\n


Ken*_*rey 5

if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
Run Code Online (Sandbox Code Playgroud)