用javascript替换字符串中的多个字符
问题描述:
我得到了这个不错的代码,我不知道为什么不起作用。为了兼容性的目的,它应该获得文本输入的值并用它的HTML代码替换每个给定的国家字符。但是,当我点击按钮时,该函数返回的字符串没有任何更改。 有什么想法?用javascript替换字符串中的多个字符
(jsfiddle)
<a id="reminder1" onclick="document.getElementById('reminder2').style.display = ''; document.getElementById('reminder1').style.display = 'none';">
Set reminder
</a>
<a id="reminder2" class="reminder" style="display:none;">
<input type="text" id="reminderh" size=40 style="font-size:20px;">
<input type="button" value="Set" onclick="csere(document.getElementById('reminderh').value);">
</a>
<script>
function csere(qwe){
document.getElementById('reminder2').style.display = 'none';
var rtz0 = qwe.replace("á","á");
var rtz1 = rtz0.replace("Á","Á");
var rtz2 = rtz1.replace("é","é");
var rtz3 = rtz2.replace("É","É");
var rtz4 = rtz3.replace("í","í");
var rtz5 = rtz4.replace("Í","Í");
var rtz6 = rtz5.replace("ö","ö");
var rtz7 = rtz6.replace("Ö","Ö");
var rtz8 = rtz7.replace("ő","&ő");
var rtz9 = rtz8.replace("Ő","Ő");
var rtz10 = rtz9.replace("ó","ó");
var rtz11 = rtz10.replace("Ó","Ó");
var rtz12 = rtz11.replace("ü","ü");
var rtz13 = rtz12.replace("Ü","Ü");
var rtz14 = rtz13.replace("ű","ű");
var rtz15 = rtz14.replace("Ű","Ű");
var rtz16 = rtz15.replace("ú","ú");
var uio = rtz16.replace("Ú","Ú");
//Creates a cookie with the final value (different function)
createCookie('reminder',uio,1500);
document.getElementById('reminder1').style.display = '';
}
</script>
答
你可以replace一切程序,不使用命名实体:
return input.replace(/[^ -~]/g, function(chr) {
// ^^^^^^
// this is a regexp for "everything than printable ASCII-characters"
// and even works in a ASCII-only charset. Identic: [^\u0020-\u007E]
return "&#"+chr.charCodeAt(0)+";";
});
如果你想使用命名的实体,您可以用键 - 值映射结合本(像在@jackwanders回答) :
var chars = {
"á" : "á",
"Á" : "Á",
"é" : "é",
"É" : "É",
...
}
return input.replace(/[^ -~]/g, function(chr) {
return (chr in chars)
? chars[chr]
: "&#"+chr.charCodeAt(0)+";";
});
然而,你应该永远不需要在JavaScript中使用HTML实体。使用UTF8作为所有内容的字符编码,它将起作用。
答
我以为你是只更换一个字符的第一个实例的问题。在JavaScript中,你必须specifiy使用正则表达式这样的全球性替代对象:
var rtz0 = qwe.replace(new RegExp("á", "g"), "á");
这将是最好的,因为通过PPvG或jackwanders提到创建一个数组,但在其他方面ATLEAST重用现有的变量。你可以很容易地做到这一点是这样的:
qwe = qwe.replace(new RegExp("á", "g"), "á");
qwe = qwe.replace(new RegExp("Á", "g"), "Á");
答
你可以创建一个具有键/值对的对象的每个字符来代替:
var chars = {
"á" : "á",
"Á" : "Á",
"é" : "é",
"É" : "É",
...
}
,然后在.replace
调用中使用的函数:
var uio = qwe.replace(/[áÁéÉ]/g,function(c) { return chars[c]; });
你的对象,正则表达式显然需要扩大,包括所有你要替换
人物3210
答
这些字符受HTML页面,JavaScript页面和HTTP请求的编码影响。尝试用它们的Unicode等值替换字符:
<a id="reminder1" onclick="document.getElementById('reminder2').style.display = ''; document.getElementById('reminder1').style.display = 'none';">
Set reminder
</a>
<a id="reminder2" class="reminder" style="display:none;">
<input type="text" id="reminderh" size=40 style="font-size:20px;">
<input type="button" value="Set" onclick="csere(document.getElementById('reminderh').value);">
</a>
<script>
function csere(qwe){
document.getElementById('reminder2').style.display = 'none';
var rtz0 = qwe.replace(/\u00E1/,"á");
var rtz1 = rtz0.replace(/\u00C1/,"Á");
var rtz2 = rtz1.replace(/\u00E9/,"é");
var rtz3 = rtz2.replace(/\u00C9/,"É");
var rtz4 = rtz3.replace(/\u00ED/,"í");
var rtz5 = rtz4.replace(/\u00CD/,"Í");
var rtz6 = rtz5.replace(/\u00F6/,"ö");
var rtz7 = rtz6.replace(/\u00D6/,"Ö");
var rtz8 = rtz7.replace(/\u00F5/,"&ő");
var rtz9 = rtz8.replace(/\u00D5/,"Ő");
var rtz10 = rtz9.replace(/\u00F3/,"ó");
var rtz11 = rtz10.replace(/\u00D3/,"Ó");
var rtz12 = rtz11.replace(/\u00FC/,"ü");
var rtz13 = rtz12.replace(/\u00DC/,"Ü");
var rtz14 = rtz13.replace(/\u0171/,"ű");
var rtz15 = rtz14.replace(/\u0170/,"Ű");
var rtz16 = rtz15.replace(/\u00FA/,"ú");
var uio = rtz16.replace(/\u00DA/,"Ú");
//Creates a cookie with the final value (different function)
createCookie('reminder',uio,1500);
document.getElementById('reminder1').style.display = '';
}
</script>
仔细检查我的转换是否确定。我在Wikibooks上使用了网格。
适用于我(我使用过'console.log') – SomeKittens 2012-08-02 17:16:08
在完成所有替换之后,您永远不会将值分配回元素。 – jbabey 2012-08-02 17:29:00
原来我实际上并不需要UTF编码。我只是在使用它,因为整个网站都使用它,而我认为它是必要的。基本上,我不需要代码来代替国家字符,因为即使没有它,它们看起来也很好。 – SeinopSys 2012-08-02 18:32:07