Jquery:在按键上过滤输入

Fer*_*ndo 6 javascript regex jquery keypress keyup

我有一个文本字段,它只接受以下字符:

允许的字符:[az 0-9 +# - .]

这是相同的过滤器SO确实在"标签"字段,当你问一个问题.如果用户键入无效字符,我希望当前文本字段值保持不变.我试过了:

$('#post_tags').keypress(function(event){
    var char = String.fromCharCode(event.which)
    var txt = $(this).val()

    if (! txt.match(/[^A-Za-z0-9+#-\.]/)){
        $(this).val(txt.replace(char, ''));
    }
})
Run Code Online (Sandbox Code Playgroud)

为什么它不起作用?谢谢!

Exc*_*Cat 13

这对我有用:

$(function(){
    $('#t').keypress(function(e){
        var txt = String.fromCharCode(e.which);
        console.log(txt + ' : ' + e.which);
        if(!txt.match(/[A-Za-z0-9+#.]/)) 
        {
            return false;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="t" />
Run Code Online (Sandbox Code Playgroud)


Jer*_*rry 5

/[^A-Za-z0-9+#-\.]/
Run Code Online (Sandbox Code Playgroud)

这否定了任何一个角色的匹配.要使它匹配多个字符,你必须+在那里使用:

/[^A-Za-z0-9+#-\.]+/
                  ^
Run Code Online (Sandbox Code Playgroud)

现在要匹配整个字符串,您需要添加锚点:

/^[^A-Za-z0-9+#-\.]+$/
 ^                  ^
Run Code Online (Sandbox Code Playgroud)

编辑:好的,似乎-这里也创建了从字符#到范围的范围..在这种情况下,您可以将其转义,或将其放在最后:

/^[^A-Za-z0-9+#\-\.]+$/

/^[^A-Za-z0-9+#\.-]+$/
Run Code Online (Sandbox Code Playgroud)