Javascript удаление акцентов - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу использовать код Эвана Эллиота (ниже) для удаления ударений в строках, но он возвращает «а» вместо соответствующей ванильной версии каждого символа.Я объявляю <meta charset="utf-8"> вверху моей страницы.

function NormalizeString(s){
            var r=s.toLowerCase();
                        var r=s.toLowerCase();
                        r = r.replace(new RegExp("\\s", 'g'),"");
                        r = r.replace(new RegExp("[àáâãäå]", 'g'),"a");
                        r = r.replace(new RegExp("æ", 'g'),"ae");
                        r = r.replace(new RegExp("ç", 'g'),"c");
                        r = r.replace(new RegExp("[èéêë]", 'g'),"e");
                        r = r.replace(new RegExp("[ìíîï]", 'g'),"i");
                        r = r.replace(new RegExp("ñ", 'g'),"n");                            
                        r = r.replace(new RegExp("[òóôõö]", 'g'),"o");
                        r = r.replace(new RegExp("œ", 'g'),"oe");
                        r = r.replace(new RegExp("[ùúûü]", 'g'),"u");
                        r = r.replace(new RegExp("[ýÿ]", 'g'),"y");
                        r = r.replace(new RegExp("\\W", 'g'),"");
                        return r;  
  }

[EDIT] Хорошо. Я сделал тестовую страницу, чтобы попытаться выяснить, в чем проблема:

<!DOCTYPE  html>
<html>
    <head>

        <meta charset="utf-8">
        <title></title>

        <script type="text/javascript">
    function NormalizeString(s){
            var r=s.toLowerCase();
                        var r=s.toLowerCase();
                        r = r.replace(new RegExp("\\s", 'g'),"");
                        r = r.replace(new RegExp("[àáâãäå]", 'g'),"a");
                        r = r.replace(new RegExp("æ", 'g'),"ae");
                        r = r.replace(new RegExp("ç", 'g'),"c");
                        r = r.replace(new RegExp("[èéêë]", 'g'),"e");
                        r = r.replace(new RegExp("[ìíîï]", 'g'),"i");
                        r = r.replace(new RegExp("ñ", 'g'),"n");                            
                        r = r.replace(new RegExp("[òóôõö]", 'g'),"o");
                        r = r.replace(new RegExp("œ", 'g'),"oe");
                        r = r.replace(new RegExp("[ùúûü]", 'g'),"u");
                        r = r.replace(new RegExp("[ýÿ]", 'g'),"y");
                        r = r.replace(new RegExp("\\W", 'g'),"");
                        return r;  
  }

    function loadhandler(){
       alert(NormalizeString('Opérations'))
    }

        </script>
    </head>

    <body class="" onload="loadhandler()">


    </body>

</html>

Тем не менеевыход для «Операции» - «Операция».Это из-за моих настроек IE7?

[EDIT]

«Операция» также выводит «oparation» в Firefox: (

1 Ответ

0 голосов
/ 14 января 2016

Эта функция может быть полезна для того, что вам нужно:

function removeAccents (text) {
    var accents    = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž',
        accentsOut = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz",
        textNoAccents = [];

    for (var i in text) { 
        var idx = accents.indexOf(text[i]);
        if (idx != -1)
            textNoAccents[i] = accentsOut.substr(idx, 1);
        else
            textNoAccents[i] = text[i];
    }

    return textNoAccents.join('');
}
...