如何从字符串中删除重音字符?
特别是在IE6中,我有这样的东西:
accentsTidy = function(s){
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;
};
但是IE6让我很烦,它好像不喜欢我的正则表达式。
替换变音符的一种更简单的方法。
function replaceDiacritics(str){
var diacritics = [
{char: 'A', base: /[\300-\306]/g},
{char: 'a', base: /[\340-\346]/g},
{char: 'E', base: /[\310-\313]/g},
{char: 'e', base: /[\350-\353]/g},
{char: 'I', base: /[\314-\317]/g},
{char: 'i', base: /[\354-\357]/g},
{char: 'O', base: /[\322-\330]/g},
{char: 'o', base: /[\362-\370]/g},
{char: 'U', base: /[\331-\334]/g},
{char: 'u', base: /[\371-\374]/g},
{char: 'N', base: /[\321]/g},
{char: 'n', base: /[\361]/g},
{char: 'C', base: /[\307]/g},
{char: 'c', base: /[\347]/g}
]
diacritics.forEach(function(letter){
str = str.replace(letter.base, letter.char);
});
return str;
};
新RegExp的格式为
RegExp(something, 'modifiers');
所以你会想
accentsTidy = function(s){
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 replaceDiacritics(str){
var diacritics = [
{char: 'A', base: /[\300-\306]/g},
{char: 'a', base: /[\340-\346]/g},
{char: 'E', base: /[\310-\313]/g},
{char: 'e', base: /[\350-\353]/g},
{char: 'I', base: /[\314-\317]/g},
{char: 'i', base: /[\354-\357]/g},
{char: 'O', base: /[\322-\330]/g},
{char: 'o', base: /[\362-\370]/g},
{char: 'U', base: /[\331-\334]/g},
{char: 'u', base: /[\371-\374]/g},
{char: 'N', base: /[\321]/g},
{char: 'n', base: /[\361]/g},
{char: 'C', base: /[\307]/g},
{char: 'c', base: /[\347]/g}
]
diacritics.forEach(function(letter){
str = str.replace(letter.base, letter.char);
});
return str;
};
有很多这样的方法,但我认为这个方法简单且足够好:
function remove_accents(strAccents) {
var strAccents = strAccents.split('');
var strAccentsOut = new Array();
var strAccentsLen = strAccents.length;
var accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëÇçðÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž";
var accentsOut = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeCcdDIIIIiiiiUUUUuuuuNnSsYyyZz";
for (var y = 0; y < strAccentsLen; y++) {
if (accents.indexOf(strAccents[y]) != -1) {
strAccentsOut[y] = accentsOut.substr(accents.indexOf(strAccents[y]), 1);
} else
strAccentsOut[y] = strAccents[y];
}
strAccentsOut = strAccentsOut.join('');
return strAccentsOut;
}
如果你还想删除特殊字符,并转换下划线中的空格和连字符,请执行以下操作:
string = remove_accents(string);
string = string.replace(/[^a-z0-9\s]/gi, '').replace(/[-\s]/g, '_');