Як зробити порівняння рядків без врахування регістру?
Як виконати порівняння рядків без врахування регістру в JavaScript?
954
3
Як виконати порівняння рядків без врахування регістру в JavaScript?
Найпростіший спосіб зробити це (якщо вас не турбують спеціальні символи Unicode) - викликати
toUpperCase
:**РЕДАГУВАТИ]: Ця відповідь була додана 9 років тому. Сьогодні вам слід використовувати
localeCompare
з опцієючутливість: 'наголос'
:Параметр
{ чутливість: 'наголос' }
вказуєlocaleCompare()
вважати два варіанти однієї і тієї ж базової літери однаковими, якщо вони не мають різних наголосів (як у третьому прикладі вище).Крім того, ви можете використовувати
{ sensitivity: 'base' }
, який розглядає два символи як еквівалентні, якщо їхній базовий символ однаковий (таким чином,A
буде розглядатися як еквівалентá
).**Зверніть увагу, що третій параметр
localeCompare
не підтримується в IE10 або нижче, або в деяких мобільних браузерах (див. таблицю сумісності на сторінці за посиланням вище), тому, якщо вам потрібно підтримувати ці браузери, вам знадобиться якийсь запасний варіант:Початкова відповідь
Найкращий спосіб виконати нечутливе до регістру порівняння в JavaScript - використовувати метод RegExp
match()
з прапоромi
.https://stackoverflow.com/questions/177719/javascript-case-insensitive-search
Якщо обидва порівнювані рядки є змінними (а не константами), то все трохи складніше, оскільки потрібно згенерувати RegExp з рядка, але передача рядка в конструктор RegExp може призвести до некоректних збігів або невдалих збігів, якщо в рядку присутні спеціальні regex-символи.
Якщо ви дбаєте про інтернаціоналізацію, не використовуйте
toLowerCase()
абоtoUpperCase()
, оскільки вони не забезпечують точне порівняння без урахування регістру у всіх мовах.http://www.i18nguy.com/unicode/turkish-i18n.html
Я написав продовження. Дуже тривіальне.