2012-06-20 5 views
1

악센트 부호가있는 문자를 악센트가없는 악보와 동일하게 취급해야합니다. 이것은 내 코드입니다 :악센트 부호가있는 문자를 무시하는 string.search()?

var re = new RegExp(string, 'i'); 
if(target.search(re) == 0) { } 

현재 문자의 대소 문자를 무시합니다. 문자가 악센트를 받거나 포함하지 않는 경우 어떻게 무시합니까?

+3

먼저 문자열에서 악센트를 제거하고 정규식을 통과 시도 라이브러리 semplice을 사용합니다. http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings. 어쨌든 작동해야합니다. 이 질문 또는 유사 물은 여러 번 질문되었습니다. – elclanrs

답변

5

액센트를 먼저 제거한 다음 RegExp를 수행해야한다고 생각합니다.
당신은 내가 here을 발견 taht를이 기능을 사용할 수 있습니다

function stripVowelAccent(str) 
{ 
var rExps=[ 
{re:/[\xC0-\xC6]/g, ch:'A'}, 
{re:/[\xE0-\xE6]/g, ch:'a'}, 
{re:/[\xC8-\xCB]/g, ch:'E'}, 
{re:/[\xE8-\xEB]/g, ch:'e'}, 
{re:/[\xCC-\xCF]/g, ch:'I'}, 
{re:/[\xEC-\xEF]/g, ch:'i'}, 
{re:/[\xD2-\xD6]/g, ch:'O'}, 
{re:/[\xF2-\xF6]/g, ch:'o'}, 
{re:/[\xD9-\xDC]/g, ch:'U'}, 
{re:/[\xF9-\xFC]/g, ch:'u'}, 
{re:/[\xD1]/g, ch:'N'}, 
{re:/[\xF1]/g, ch:'n'} ]; 

for(var i=0, len=rExps.length; i<len; i++) 
    str=str.replace(rExps[i].re, rExps[i].ch); 

return str; 
} 
+0

약한 솔루션으로 예상하지 못한 많은 악센트 부호가있는 문자로 실패합니다. 악센트를 올바르게 처리하는 방법은 [문자열의 악센트 제거] (http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings)를 참조하십시오. –

3

http://semplicewebsites.com/removing-accents-javascript

var latin_map = { 
    'Á': 'A', // LATIN CAPITAL LETTER A WITH ACUTE 
    'Ă': 'A', // LATIN CAPITAL LETTER A WITH BREVE 
... 
    'ᵥ': 'v', // LATIN SUBSCRIPT SMALL LETTER V 
    'ₓ': 'x', // LATIN SUBSCRIPT SMALL LETTER X 
}; 


String.prototype.latinise = function() { 
    return this.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x; }) 
}; 
관련 문제