2012-06-20 111 views
1

我需要將重音字符視爲與非重音對應字符相同。這是我的代碼:string.search()忽略重音字符?

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

目前,它忽略了人物的情況下,我怎麼還,如果字符是重音或者不能忽視?

+3

先嚐試刪除字符串中的口音,然後通過一個正則表達式。 http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings。在任何情況下都應該有效。這個問題或類似問題已被多次詢問。 – elclanrs

回答

5

我認爲你必須先刪除口音,然後做你的RegExp。
您可以使用此功能taht我發現here

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

使用該庫semplice

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