Устранение акцентов/диакритических знаков в JS для IE6

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если требуется избавиться от акцентов в строке, значит, вам поможет функция normalize в JavaScript. Сначала примените normalize('NFD'), которая разделит каждый символ на основной символ и отдельный акцент, а затем используйте метод replace с регулярным выражением для удаления диакритических знаков.

Пример:

JS
Скопировать код
const removeAccents = str => str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
console.log(removeAccents('àéîöú')); // "aeiou" в приватном режиме

Здесь ключом к разгадке является использование normalize('NFD'), которое разбивает символы на составные части, а регулярное выражение /[\u0300-\u036f]/g удаляет акценты.

Кинга Идем в IT: пошаговый план для смены профессии

Детальное разъяснение и альтернативы

Поддержка старых версий браузера, например, IE6

Для обеспечения совместимости со старыми браузерами, такими как IE6, не поддерживающими метод normalize, можно создать карту соответствия между символами с акцентами и их базовыми версиями:

JS
Скопировать код
const accentsMap = new Map([['á', 'a'], /* и так далее */ ]);

const removeAccentsFallback = (str) => {
  // Версия кода для работы в браузерах, не поддерживающих метод normalize
  return str.split('').map(char => accentsMap.get(char) || char).join('');
};

Влияние диакритических знаков на порядок сортировки

Акценты могут повлиять на последовательность сортировки строк. Для корректной сортировки без учета акцентов, можно использовать Intl.Collator:

JS
Скопировать код
const strings = ['apple', 'àpple', 'banana'];
strings.sort(new Intl.Collator('en', { sensitivity: 'base' }).compare);

Повышение производительности

Если требуется ускорить выполнение кода и сделать его более эффективным, вы можете использовать свойство Unicode \p{M} в регулярных выражениях:

JS
Скопировать код
const removeAccents = str => str.normalize('NFD').replace(/\p{M}/gu, '');
// В результате все акценты из строки исчезнут!

Для еще большего ускорения рассмотрите возможность использования конструкторов строк вместо регулярных выражений.

Диакритики и специальные символы

Столкнувшись с такими символами как œ и œ̀, стоит обязательно включить их в карту диакритиков для надежного решения всей задачи.

Проверка на соответствие латинице

Чтобы убедиться, что строки составлены только из латинских символов, можно воспользоваться библиотеками, такими как Latinise:

JS
Скопировать код
if (latinise(str).length === str.length) {
  // Строка полностью латинизирована
}

Когда в работу вступает lodash

Если в вашем проекте уже используется lodash, то можно воспользоваться функцией _.deburr(), поддерживающей IE6 и упрощающей удаление диакритиков.

Внимание к лицензиям

Перед использованием или модификацией любых внешних решений для удаления диакритиков, проверьте, что они соответствуют лицензионным требованиям, например, Apache License, Version 2.0.

Визуализация

Вообразите себе строку как яркий шествие символов, каждый из которых украшен акцентом:

Markdown
Скопировать код
Яркое шествие символов: [â, é, i̗, õ, ú]

Чтобы нормализовать эти символы, нам нужно откупорить все изящные украшения, облегчив их до базового вида:

JS
Скопировать код
normalizedText = originalText.normalize('NFD').replace(/[\u0300-\u036f]/g, '');

Этот процесс можно сравнить с введением строгого дресс-кода на вечеринке:

Markdown
Скопировать код
Приводим к общему знаменателю: [â → a, é → e, ï → i, õ → o, ú → u]

В итоге получаем минималистичный и чистый стиль:

Markdown
Скопировать код
Готовое к шествию: [a, e, i, o, u]

Теперь символы, представленные в простых и понятных формах, будут отвечать любым вызовам в мире кода.

Учет лигатур и специальных символов

Тщательно подобранная функция отображения умело справится со специальными символами и лигатурами.

Взвешенное применение lodash

Если весь функционал lodash вам кажется избыточным, примените lodash.deburr как отдельный npm-пакет, тем самым сокращая размер вашего проекта.

Погружение в тему

Предложенные рекомендации помогут глубже понять процесс удаления диакритических знаков, включая ссылки на полифилл для Intl.Collator и протестированные решения, например, от @skerit, обеспечивающие стабильную производительность.

Полезные материалы

  1. String.prototype.normalize() – JavaScript | MDN
  2. Remove accents/diacritics in a string in JavaScript – Stack Overflow
  3. Unicode equivalence – Wikipedia
  4. ECMAScript 2015 Language Specification – ECMA-262 6th Edition
  5. unorm – npm
  6. UAX #44: Unicode Character Database
  7. Unicode character class escape: \p{...}, \P{...} – JavaScript | MDN

Завершение

Теперь, когда мы достигли максимальной "производительности" в наших решениях, пора активировать наш остро отточенный код. Пусть наши сессии кодирования пройдут на ура, а акценты строк останутся лишь сладкими воспоминаниями!

Свежие материалы