Замена акцентированных символов на простые ASCII
Описание проблемы:
Я пытаюсь превратить список фамилий в алфавитно-цифровые имена пользователей, однако некоторые из них содержат не-ASCII символы. Вот пример таких фамилий:
Hernández
Quermançós
Migueláñez
Одним из способов решения этой проблемы было бы использование регулярных выражений для удаления всех неалфавитных символов, например, с помощью a.replace(/[^a-z0-9]/gi,'')
. Однако более интуитивным решением (по крайней мере, для пользователя) было бы заменить акцентированные символы на их «обычные» эквиваленты, например, преобразовать á
в a
, а ç
в c
и так далее.
Есть ли простой способ сделать это на JavaScript?
2 ответ(ов)
Поскольку эти символы не имеют математической связи со своими «обычными эквивалентами» в таблице Unicode, вам необходимо вручную заменить их, используя что-то вроде следующего кода:
function cleanUpSpecialChars(str) {
return str
.replace(/[ÀÁÂÃÄÅ]/g, "A")
.replace(/[àáâãäå]/g, "a")
.replace(/[ÈÉÊË]/g, "E")
//.... все остальные замены
.replace(/[^a-z0-9]/gi, ''); // финальная очистка
}
Опция нечувствительности к регистру не работает на этих символах, поэтому вам нужно обрабатывать как строчные, так и заглавные варианты.
Если у вас есть такой словарь:
var dict = {"á": "a", "ç": "c"};
и вы хотите использовать его в функции, которая заменяет символы в строке, используя регулярное выражение, вы можете сделать это так:
var a = "Пример строки с символами á и ç.";
// Заменяем символы, используя словарь
var result = a.replace(/[^\w ]/g, function(char) {
return dict[char] || char;
});
console.log(result);
В этом коде функция replace
будет искать все символы, которые не являются буквами или пробелами, и заменять их на соответствующие значения из словаря dict
. Если символа нет в словаре, он останется неизменным. Например, символ á
будет заменён на a
, а символ ç
— на c
.
Как посчитать количество вхождений строки в строке?
Как удалить все переносы строк из строки
Как извлечь число из строки в JavaScript?
Как преобразовать строку, разделённую запятыми, в массив?
Удалить первый символ строки, если он равен 0