2011-12-08 85 views
3

我将this solution改编成我的脚本。这个想法是为了防止用户输入未经授权的字符(当然在后端也有一个过滤器)。用于textarea的jQuery输入过滤器

$('#someinput').keyup(function() { 
    var $th = $(this); 
    $th.val($th.val().replace(/[^a-zA-Z0-9]/g, function(str) { 
     console.log(str); 
     return ''; 
    })) 
}) 

它的工作不错,但我还需要用户能够输入特定允许的字符,如:!?,ñáéíóú - 我的意思是,基本A-ZA-Z0-9再加上一些基本的字符和一大堆特殊语言字符。

实际需要被排除在外是什么:@#$%^ & *()= _ +“':;?!/ <> \ | {} []

任何想法感谢

解决方案感谢Michael

//query 
$('#someinput').keyup(function() { 
    var $th = $(this); 
    $th.val($th.val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';})); 
}).bind('paste',function(e) { 
    setTimeout(function() { 
     $('#someinput').val($('#someinput').val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';})); 
     $('#someinput').val($('#someinput').val().replace(/\s+/g,' ')); 
    },100); 
}); 
+1

http://stackoverflow.com/questions/6565480/javascript-jquery-regex-replace-input-field-with-valid-characters看看这有助于 – Val

回答

4

反转正则表达式来只替换你想省略特定的字符:

$th.val($th.val().replace(/\s?[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g, "")); 
// Edit: added optional \s to replace spaces after special chars 

注意,他们几个人的需要与[]字符类中的反斜杠转义:\\\[\]\^\/

+0

大!我还将此添加到了bind('paste'),函数(e)在用户粘贴一堆文本时运行正则表达式。如果他粘贴:“你好@朋友”,结果将是“你好朋友”,除了有2个空格而不是1个以外,还可以。是否有可能在相同的正则表达式中阻止多个空格?或者我应该把它放在bind()事件的一个单独的正则表达式中。 – andufo

+0

@andufo可以在上面的'[]'之前和之后放置一个可选空间。试试我上面的编辑,看看它是否适合你。否则,你可以做另一个替换来折叠多个空格:'/ \ s + /'替换为一个空格。 –

+0

我想我可能会自己做第二次替换,而不是尝试修改那个正则表达式 –

3

如果我理解你想要做什么,你就不能添加这些不需要的字符到你的正则表达式而不是做[^a-zA-Z0-9]

替换与[@#\$%\^&\*\(\)=_\+"':;\/<>\\\|\{\}\[\]](注意转义)