Содержит нечувствительные к регистру слова

У меня есть следующее:

if (referrer.indexOf("Ral") == -1) { ... }

Я хочу сделать Ral нечувствительным к регистру, чтобы он мог быть RAl, rAl и т.д. и все равно совпадал.

Есть ли способ сказать, что Ral должен быть нечувствительным к регистру?

Комментарии к вопросу (1)
Решение

Добавьте .toLowerCase() после referrer. Этот метод превращает строку в строку в нижнем регистре. Затем используйте .indexOf(), используя ral вместо Ral.

if (referrer.toLowerCase().indexOf("ral") === -1) { 

Того же самого можно добиться и с помощью регулярного выражения (особенно полезно, когда требуется проверка на динамические шаблоны):

if (!/Ral/i.test(referrer)) {
   //    ^i = Ignore case flag for RegExp
Комментарии (7)

Другой вариант заключается в использовании метода поиска как следовать:

if (referrer.search(new RegExp("Ral", "i")) == -1) { ...

Это выглядит более элегантно, затем преобразовать всю строку в нижний регистр и может быть более эффективно. <БР> С столоверчением()код есть два прохода по строке, один проход по всей строке, чтобы преобразовать его в нижний регистр, а другой искать нужного индекса.<БР> Срегулярное выражение` код один проход по строке, которая выглядит, чтобы соответствовать желаемого индекса.<БР>

Поэтому, на длинных строк рекомендую использовать регулярное выражение версия (я думаю, что для коротких строк эта эффективность достигается за счет создания хотя объект выражение)

Комментарии (2)

Используйте RegExp:

if (!/ral/i.test(referrer)) {
    ...
}

Или используйте .toLowerCase():

if (referrer.toLowerCase().indexOf("ral") == -1)
Комментарии (1)

Есть несколько подходов здесь.

Если вы хотите выполнить сравнение без учета регистра проверить только этот экземпляр, сделать что-то вроде следующего.

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
    ...

Кроме того, если вы'вновь регулярно выполняя эту проверку, вы можете добавить новый метод indexOf()`-как способ на эту строку, но сделать его нечувствительным к регистру.

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

// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
Комментарии (1)

Из ES2016 вы также можете использовать немного лучше / легче / более элегантный способ:

if (referrer.includes("Ral")) { ... }

или

if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }

Вот некоторые сравнения .метод indexOf() и .включает в себя(): https://dev.to/adroitcoder/includes-vs-indexof-in-javascript

Комментарии (2)
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
Комментарии (3)

Это'с 2016 года, и там's нет четкого пути, как это сделать? Я надеялась на copypasta. Я'придется идти.

Дизайн Примечания: я хотел, чтобы минимизировать использование памяти и, следовательно, повышение скорости - так нет копирование/мутирующие строк. Я предполагаю, что В8 (и других систем) можно оптимизировать эту функцию.

//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
    //TODO: guard conditions here

    var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
    var needleIndex = 0;
    var foundAt = 0;
    for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
        var needleCode = needle.charCodeAt(needleIndex);
        if (needleCode >= 65 && needleCode = 65 && haystackCode  128?
        //if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
        if (haystackCode !== needleCode)
        {
            foundAt = haystackIndex;
            needleIndex = 0; //Start again
        }
        else
            needleIndex++;

        if (needleIndex == needle.length)
            return foundAt;
    }

    return -1;
}

Моя причина для названия:

  • Должен иметь метод indexOf во имя
  • Дон'т добавить суффикс - относится к следующим параметром
  • Дон'т использовать "и caseInsensitive", что'ы оооочень долго
  • на "природных" и является хорошим кандидатом, потому что по умолчанию чувствительны сравнения не являются естественной для человека на первом месте.

Почему не...:

  • столоверчением() - потенциальный неоднократные призывы к столоверчения на одну и ту же строку.
  • Выражение - неудобно искать с переменной. Даже объекта regexp неловко, чтобы избежать символов
Комментарии (2)

Для более эффективного поиска используйте следующий код,

var myFav   = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";

// Check for matches with the plain vanilla indexOf() method:
alert( theList.indexOf( myFav ) );

// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );

В первое предупреждение(), JavaScript и вернулись на "-1" и - другими словами, метод indexOf() не нашел совпадений: это просто потому, что "наличие" это в нижнем регистре в первой строке, и правильно, с большой буквы во-вторых. Чтобы выполнить поиск независимый от регистра при помощи indexOf(), вы можете сделать обе строки в верхнем или нижнем регистре. Это означает, что, как и в второе предупреждение(), JavaScript будет только проверить на вхождение строки, вы ищете, капитализация игнорируется.

Ссылка, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm

Комментарии (0)

Если "рекомендатель" - это массив, вы можете использовать findIndex()

 if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}
Комментарии (0)

Пример для любого языка:

'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
Комментарии (0)

Здесь'ы мое мнение:

Сценарий:


var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
  $("#textContainer").html(originalText)
  var text = $("#textContainer").html()
  var val = $("#search").val()
  if(val=="") return;
  var matches = text.split(val)
  for(var i=0;i
Комментарии (0)

Вы можете попробовать это

в

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

console.log(str.toLowerCase().includes(searchStr.toLowerCase()))

в

Комментарии (0)