Использование JavaScript для сопоставления текста с диакритическими знаками или без них

Я использую поиск на основе AJAX для имен, которые пользователь ищет в текстовом поле.

Я предполагаю, что все имена в базе данных будут транслитерированы в европейские алфавиты (т. Е. Без кириллицы, японского, китайского). Однако имена по-прежнему будут содержать символы с диакритическими знаками, такие как ç, ê и даже č и ć.

Тем не менее, простой поиск, такой как «Micic», не будет соответствовать «Mičić» - и пользователь ожидает, что так и будет.

Поиск AJAX использует регулярные выражения для определения совпадения. Я изменил сравнение регулярных выражений, используя эту функцию в попытка сопоставить больше символов с диакритическими знаками. Однако это немного неуклюже, поскольку не учитывает все символы.

function makeComp (input)
{
    input = input.toLowerCase ();
    var output = '';
    for (var i = 0; i < input.length; i ++)
    {
        if (input.charAt (i) == 'a')
            output = output + '[aàáâãäåæ]'
        else if (input.charAt (i) == 'c')
            output = output + '[cç]';
        else if (input.charAt (i) == 'e')
            output = output + '[eèéêëæ]';
        else if (input.charAt (i) == 'i')
            output = output + '[iìíîï]';
        else if (input.charAt (i) == 'n')
            output = output + '[nñ]';
        else if (input.charAt (i) == 'o')
            output = output + '[oòóôõöø]';
        else if (input.charAt (i) == 's')
            output = output + '[sß]';
        else if (input.charAt (i) == 'u')
            output = output + '[uùúûü]';
        else if (input.charAt (i) == 'y')
            output = output + '[yÿ]'
        else
            output = output + input.charAt (i);
    }
    return output;
}

Помимо такой функции подстановки, есть ли лучший способ? по сравнению?

23
задан Philip 18 April 2011 в 09:02
поделиться