Mit JavaScript durchführen, text-matches mit/ohne Sonderzeichen

Bin ich mit einer AJAX-basierten Suche nach Namen, die ein Benutzer sucht in einer text-box.

Ich bin die Annahme, dass alle Namen in der Datenbank werden transliteriert zu europäischen Alphabeten (d.h. kein Kyrillisch, Japanisch, Chinesisch). Allerdings, die Namen werden noch enthalten Sie Sonderzeichen wie ç, ê und sogar č und ć.

Einer einfachen Suche wie "Micic" nicht mit "Mičić" aber - und die user-Erwartung ist, dass es wird.

Den AJAX-lookup verwendet reguläre Ausdrücke, um zu bestimmen, eine übereinstimmung. Ich habe modifiziert den regulären Ausdruck-Vergleich mit dieser Funktion in einem Versuch entsprechend mehr Zeichen mit Akzent. Jedoch, es ist ein wenig umständlich, da es nicht berücksichtigt, alle Zeichen.

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;
}

Abgesehen von einer substitution Funktion wie diese, gibt es eine bessere Möglichkeit? Vielleicht zu "deaccent" die Zeichenfolge, die verglichen werden?

InformationsquelleAutor der Frage Philip | 2011-04-18

Schreibe einen Kommentar