Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Как сделать что бы сравнение не было чувствительно к регистру?

#javascript #javascript_faq


Допустим у меня есть

var word = 'Привет';


Как сделать что бы

word == 'ПрИвЕт' было true
    


Ответы

Ответ 1



Переводить все в один регистр var word = 'Привет'; console.log(word.toLowerCase() === 'ПрИвЕт'.toLowerCase()); Или добавить метод сравнения непосредственно в класс String String.prototype.sameText = function(str) { return this.toLowerCase() === str.toLowerCase(); } var word = 'Привет'; console.log(word.sameText('ПрИвЕт'));

Ответ 2



Приводите оба элемента к единому регистру. function equals(elem,base){ return elem.toUpperCase() == base.toUpperCase(); }; console.log(equals("Привет","ПрИвЕт"));

Ответ 3



toLowerCase() не всегда работает. Можно попробовать localeCompare(): [['Привет', 'привет'], ['flow', 'flow'], // D144 ['å', 'å'], // D145 ['㎒', 'MHz'], // D146 ['I', 'ı'], // Turkish ['BUSSE', 'Buße'], // D144 casefolding converts ß -> ss ].forEach(function(pair) { var [a, b] = pair, lowercase_cmp = a.toLowerCase() === b.toLowerCase(), cmp = a.localeCompare(b, 'tr', {sensitivity: 'accent'}) === 0; console.log(`${a}, ${b} -> ${lowercase_cmp} ${cmp}`) }) Строки в каждой паре в приведённых примерах эквивалентны согласно различным Unicode алгоритмам по сравнению без учёта регистра (D144, D145, D146). toLowerCase() работает только для первой пары. Решение с регулярными выражениями также не работает: /flow/ui.test('flow'). localeCompare() работает здесь для всех примеров, кроме BUSSE, Buße пары.

Комментариев нет:

Отправить комментарий