AND和OR运算符,正则表达式和值长度

时间:2012-08-12 05:19:39

标签: javascript jquery operators

我试图阻止输入任何非数字和输入值长度不超过6的内容。现在,如果输入包含alpha,则阻止超过6个字符的任何操作。但当我将其更改为阻止,如果它是alpha或大于6个字符,我根本无法输入任何内容。有什么想法吗?

<script type="text/javascript">
    $(document).ready(function () {
        var pattern = /^[0-9]+$/;
        $('#input1,#input2').keypress(function (e) {
            var length = this.value.length;
            if (!pattern.test($(this).val()) && (length >= 6)) {
                e.preventDefault();
            }
        }); 
    });
</script>

3 个答案:

答案 0 :(得分:3)

补充mazzzzz所说的内容,你可以用更强大的模式测试你想要的东西:

var pattern = /^\d{1,6}$/;

这只接受1到6个字符的数字(\ d)。

答案 1 :(得分:2)

我认为问题在于你制作正则表达式的方式,在该函数结束之后,第一个按下的字母将不会显示在$(this).val()中(这就是为什么你仍然可以使用{ {1}});这意味着正则表达式测试的val是空白的,正则表达式将不匹配。

我建议你将下一个字符附加到当前值上,这样你就可以测试字符串将是什么,而不是它是什么。

类似的东西:

e.preventDefault();

这是codepen。 codepen做了一些不同的事情,因为有更好的方法来做这个,然后使用昂贵的正则表达式(这无关紧要,但我喜欢优化)。

答案 2 :(得分:0)

似乎你根本不需要正则表达式。

<input type="text" id="input1" />
<input type="text" id="input2" />

<script type="text/javascript">
    var maxLen = 6,
        helpCodes = [37, 39, 8, 9], // left and right arrows, backspace, tab
        codes = [];
    for(var code = 48; code < 58; code++) { // number keys (48-57)
        codes.push(code);
    }
    $('#input1,#input2').on('keydown', function (e) {
        if(helpCodes.indexOf(e.keyCode) > -1) {
            return true;
        }
        if(e.shiftKey || this.value.length == maxLen
                || codes.indexOf(e.keyCode) < 0 ) {
            return false;
        }
    });
</script>​

DEMO