使用regex的jquery keydown绑定不会验证撇号和句点

jquery keydown bind with regex does not validate for apostrophe and periods

本文关键字:验证 句点 regex jquery keydown 绑定 使用      更新时间:2023-09-26

我一直在使用jquery来捕获keydown事件,并验证不同情况下输入的文本,如:仅字符、字母数字、字符和空格等。

Regex使用:带空格的字符:^[a-zA-Z]+$仅限字符:^[a-zA-Z]+$字母数字:^[a-zA-Z0-9]+$

这就是我使用绑定函数的方式:

        $('.chars_and_space_only').bind('keydown', function (event) {
        // http://stackoverflow.com/a/8833854/260665
        var eventCode = !event.charCode ? event.which : event.charCode;
        if((eventCode >= 37 && eventCode <= 40) ||  eventCode == 8 || eventCode == 9 || eventCode == 46) { // Left  / Right Arrow, Backspace, Delete keys
            return;
        }
        // http://stackoverflow.com/a/8833854/260665
        var regex = new RegExp("^[a-zA-Z ]+$");
        var key = String.fromCharCode(eventCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    });

上面所有的用例都可以正常工作,但是我现在必须包括字符、空格、撇号和句点。这就是我修改过的方法:

        $(".chars_space_dots_apostrophes_only").bind('keydown', function (event) {
        // http://stackoverflow.com/a/8833854/260665
        var eventCode = !event.charCode ? event.which : event.charCode;
        if((eventCode >= 37 && eventCode <= 40) ||  eventCode == 8 || eventCode == 9 || eventCode == 46) { // Left  / Right Arrow, Backspace, Delete keys
            return;
        }
        // http://stackoverflow.com/a/8833854/260665
        var regex = new RegExp("^[a-zA-Z '.]+$");
        var key = String.fromCharCode(eventCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    });

奇怪的是,这似乎不起作用。这是小提琴:https://jsfiddle.net/ugu8f4y3/

Regex使用:^[a-zA-Z'.]+$Regex验证器确实验证了上述Regex:的文本

你好。世界

但是fiddle中的文本字段不允许我输入句点和撇号,是不是我遗漏了什么?

问题出在jquery和keydown事件上。把它换成keypress就可以了。您还应该只需要签入which

keydownkeyup对于关心钥匙物理位置的情况非常重要。在这种情况下,您想知道按键是否被按下,并处理由此产生的输入。jquery将以不同的方式规范字符代码。

有关按键、向下键和向上键之间差异的更多信息。

更新的Fiddle