2011-11-18 34 views
0

我想使用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

回答

0

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

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