0

Замена акцентированных символов на простые ASCII

8

Описание проблемы:

Я пытаюсь превратить список фамилий в алфавитно-цифровые имена пользователей, однако некоторые из них содержат не-ASCII символы. Вот пример таких фамилий:

Hernández
Quermançós 
Migueláñez

Одним из способов решения этой проблемы было бы использование регулярных выражений для удаления всех неалфавитных символов, например, с помощью a.replace(/[^a-z0-9]/gi,''). Однако более интуитивным решением (по крайней мере, для пользователя) было бы заменить акцентированные символы на их «обычные» эквиваленты, например, преобразовать á в a, а ç в c и так далее.

Есть ли простой способ сделать это на JavaScript?

2 ответ(ов)

0

Поскольку эти символы не имеют математической связи со своими «обычными эквивалентами» в таблице Unicode, вам необходимо вручную заменить их, используя что-то вроде следующего кода:

function cleanUpSpecialChars(str) {
    return str
        .replace(/[ÀÁÂÃÄÅ]/g, "A")
        .replace(/[àáâãäå]/g, "a")
        .replace(/[ÈÉÊË]/g, "E")
        //.... все остальные замены
        .replace(/[^a-z0-9]/gi, ''); // финальная очистка
}

Опция нечувствительности к регистру не работает на этих символах, поэтому вам нужно обрабатывать как строчные, так и заглавные варианты.

0

Если у вас есть такой словарь:

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.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь