【问题标题】:Javascript removing accentsJavascript 去除重音符号
【发布时间】:2012-01-01 10:42:28
【问题描述】:

我想使用 Evan Elliott 的代码(如下)来删除字符串中的重音符号,但它返回一个“a”而不是每个字符各自的原版版本。我在页面顶部声明<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;  
  }

[编辑] 好的,我做了一个测试页面,试图找出问题所在:

<!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 设置吗?

[编辑]

“Opération”在 Firefox 中也输出“oparation” :(

【问题讨论】:

  • 发布您的测试用例。此代码工作正常:jsfiddle.net/W7pTu
  • 请提供一个例子,这个fiddle 有效。当然,该函数不适用于正则表达式中的字符以外的字符。

标签: javascript string internet-explorer-7 diacritics


【解决方案1】:

此功能可能对您的需要有用:

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('');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2022-01-03
    • 2011-07-20
    • 2012-11-29
    • 2016-10-20
    相关资源
    最近更新 更多