Javascript正在删除口音

问题描述:

我想使用Evan Elliott的代码(下面)删除字符串中的重音符号,但其返回的是“a”而不是每个字符的相应香草版本。我在页面顶部声明<meta charset="utf-8">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; 
    } 

[编辑] 好吧我做了一个测试页面,试图找出问题是什么:

<!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> 

仍然是输出“操作”“oparation”。是因为我的IE7设置?

[编辑]在Firefox

“操作” 输出 “oparation” 太:(

+0

发表你的测试情况下,该代码工作正常:http://jsfiddle.net/W7pTu/ – Blender

+0

请提供一个例子,这[小提琴](http://jsfiddle.net/wUqq7/)的作品。当然,该功能不适用于其他字符在regexps里面。 – LoG

此功能可能是你所需要的有用:

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