jQuery输入过滤器用于文本域

3
我将这个解决方案应用到我的脚本中。该想法是防止用户输入未授权的字符(当然后端也有过滤器)。
$('#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
看看这个是否有帮助:https://dev59.com/WVjUa4cB1Zd3GeqPVd8z - Val
2个回答

5
将正则表达式反转,只替换您想省略的特定字符:
$th.val( $th.val().replace(/\s?[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g, ""));
// Edit: added optional \s to replace spaces after special chars

注意,其中几个需要在[]字符类内用反斜杆转义:\\\[\]\^\/

太好了!我还将其添加到bind('paste')函数中,以便在用户粘贴一大段文本时运行正则表达式。如果他粘贴了:"hello @ friend",结果将是"hello friend",这没问题,除了有两个空格而不是一个。是否可能在同一个正则表达式中防止多个空格?或者应该将其放置在仅限于bind()事件的单独正则表达式中。 - Andres SK
@andufo,你可以在上面的[]前后放一个可选的空格。尝试使用我上面的编辑,看看是否适用于你。否则,你可以进行另一个替换来折叠多个空格:/\s+/ 替换为一个空格。 - Michael Berkowski
我认为我可能会自己进行第二次替换,而不是尝试修改那个正则表达式。 - Michael Berkowski

3
如果我理解你想做的事情,你不是可以将这些不需要的字符添加到你的正则表达式中而不是使用 [^a-zA-Z0-9] 吗?
[@#\$%\^&\*\(\)=_\+"':;\/<>\\\|\{\}\[\]] 替换它(注意转义)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接