Я использую поиск на основе 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;
}
Помимо функции подстановки, подобной этой, есть ли лучший способ? Возможно, чтобы "деактивировать" сравниваемую строку?