EDIT : Ця відповідь спочатку була додана 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'));
{ sensitivity: 'accent' }Каже localeCompare()лікувати два варіанти однієї і тієї ж базової буквою, то ж , якщо вони не мають різні акценти (як в третьому прикладі) вище.
Крім того, ви можете використовувати { sensitivity: 'base' }, що трактує два символи як еквівалент, до тих пір, поки їх базовий символ є однаковим (так Aби трактувався як еквівалент á).
Зауважте, що третій параметр localeCompareне підтримується в IE10 або нижчих або певних мобільних браузерах (див. Діаграму сумісності на сторінці, що пов’язана вище), тому якщо вам потрібно підтримати ці браузери, вам знадобиться певна резервна версія:
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 */;
}
Оригінальна відповідь
Найкращий спосіб порівняння з невідчутним до обліку випадків у JavaScript - це використовувати match()метод RegExp з iпрапором.
Пошуковий нечутливий пошук
Коли обидва рядки, що порівнюються, є змінними (а не константами), то це трохи складніше, тому що вам потрібно генерувати RegExp з рядка, але передача рядка конструктору RegExp може призвести до неправильних збігів або збійних збігів, якщо рядок має спеціальний регулярний вираз символи в ній.
Якщо ви дбаєте про інтернаціоналізацію, не використовуйте toLowerCase()або, toUpperCase()оскільки це не дає точних нечутливих до випадків порівнянь на всіх мовах.
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()метод javascript. Підтримується лише сучасними браузерами під час написання (IE11 +). дивіться developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…