问题
I want to use Evan Elliott's code (below) to remove accents in strings but its returns an "a" instead of the respective vanilla version of each character. I declare <meta charset="utf-8">
at the top of my page.
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;
}
[EDIT] Ok I made a test page to try to find out what the problem is:
<!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>
Still the output for "Opération" is "oparation". Is it because of my IE7 settings?
[EDIT]
"Opération" outputs "oparation" in Firefox too :(
回答1:
This function may be useful for what you need:
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('');
}
来源:https://stackoverflow.com/questions/8186302/javascript-removing-accents