2011-11-18 1 views
0

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> 

아직도 "작업"에 대한 출력이 "oparation"입니다. 내 IE7 설정 때문입니까?

[편집] 너무 파이어 폭스에서

"작업"출력 "oparation":(

+0

후 테스트의 경우이 코드 잘 작동합니다 : http://jsfiddle.net/W7pTu/ – Blender

+0

예를 들어,이 [피들] (http://jsfiddle.net/wUqq7/) 작품을 제공하십시오. 물론 이외의 문자에 대한 기능을 작동하지 않습니다 정규 표현식 안에. – 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(''); 
}