2010-11-19 79 views
4

取代多个特殊字符目前,这会从textarea的文字和替换是在字符表中指定的所有字符:搜索和使用jQuery

<form> 
<textarea name="text" id="text" style="width:300px; height:200px;"></textarea><br /> 
<input type="button" name="submit" id="submit" value="submit" /> 
</form> 

var charMap = { 
    "Å":'x', 
    "å":'y', 
    "b":'z', 
    "c":'f' 
}; 

$('#submit').click(function() { 

    var str = $('#text').val(); 
    var str_array = str.split(''); 

    for(var i = 0, len = str_array.length; i < len; i++) { 
     str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ]; 
    } 

    foo = str_array.join(''); 
    $('#text').val(foo); 

}); 

的问题是,它并不能识别特殊字符。所以它将取代'b'和'c',但不是'Å'和'å'。

任何想法?

+2

你的意思是这些具体的替代品,或者将换行字母与字母末尾的'n'字母(其中'n'是字母表中当前字母的位置)? – Hamish 2010-11-19 23:59:52

+0

@Hamish - 我想要那些具体的替代品 – DaveKingsnorth 2010-11-20 00:52:33

回答

2

现在,我理解的要求更好,你可以只创建地图的字符到置换是这样的:

实施例:http://jsfiddle.net/gaG28/2/

var charMap = { 
    a:'z',b:'v',c:'n',d:'s',e:'d', 
    f:'k',g:'e',h:'y',i:'j',j:'r', 
    k:'f',l:'m',m:'a',n:'c',o:'q', 
    p:'t',q:'g',r:'i',s:'b',t:'p', 
    u:'l',v:'u',w:'h',x:'o',y:'w',z:'x' 
}; 
var str = "abcdefghijklmnopqrstuvwxyz"; 

var str_array = str.split(''); 

for(var i = 0, len = str_array.length; i < len; i++) { 
    str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ]; 
} 
str = str_array.join(''); 

这也将留下任何在地图中找不到的字符。

+0

太好了。我遇到的唯一问题是我想用'å'替换一些特殊字符,如'å'。当我尝试使用这些字符是返回一个没有。 – DaveKingsnorth 2010-11-20 01:36:10

+0

非常感谢帕特里克,但您的修改对我无效,请在原始问题中查看我的编辑。 – DaveKingsnorth 2010-11-20 01:52:41

+0

@Dave - 它似乎为我工作。 [这里有一个更新的例子](http://jsfiddle.net/gaG28/3/)与你引用的字符问题。如果'Å:'Å''不适合您,请尝试将该键放在引号中,如'“​​Å”:'Å''。当把键放在引号中时,几乎任何字符都应该被接受,因为它们是键名。 – user113716 2010-11-20 02:30:24

2

由于.replace()作用于一个字符串,并返回一个字符串,就可以链接多个一起更换电话:

var text = $(this).val().replace(/a/g, "z").replace(/b/g, "y").replace(/c/g, "x"); 
+0

我也想过这样做,但我想用一个正则表达式来做 – DaveKingsnorth 2010-11-20 00:00:58

+0

@DaveKingsnorth嗯......好的。我试图想,如果甚至可以使用JS正则表达式。 – Alex 2010-11-20 00:04:00

0

您的原始代码是正确的,但问题是由于该网页的字符集,请尝试以下操作:

  1. 确保您的页面保存为UTF-8
  2. 包括在以下的头

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我头同样的问题刮伤,这解决了我的问题。