Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AND和OR运算符、正则表达式和值长度_Javascript_Jquery_Operators - Fatal编程技术网

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

Javascript AND和OR运算符、正则表达式和值长度,javascript,jquery,operators,Javascript,Jquery,Operators,我试图用它来阻止输入任何非数字的和输入值长度不大于6的内容。现在,如果输入包含alpha,它会阻止任何超过6个字符的内容。但是当我把它改为block时,如果它是alpha或者大于6个字符,我就根本无法输入任何内容。有什么想法吗 <script type="text/javascript"> $(document).ready(function () { var pattern = /^[0-9]+$/; $('#input1,#input2')

我试图用它来阻止输入任何非数字的和输入值长度不大于6的内容。现在,如果输入包含alpha,它会阻止任何超过6个字符的内容。但是当我把它改为block时,如果它是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>

$(文档).ready(函数(){
变量模式=/^[0-9]+$/;
$('#输入1,#输入2')。按键(功能(e){
变量长度=this.value.length;
如果(!pattern.test($(this.val())&&(length>=6)){
e、 预防默认值();
}
}); 
});

我认为问题在于您编写正则表达式的方式,按下的第一个字母将不会显示在
$(this.val()
中,直到该函数结束(这就是为什么您仍然能够使用
e.preventDefault();
);这意味着正则表达式测试的val为空,正则表达式将不匹配

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

比如:

$(document).ready(function () {
  var pattern = /^[0-9]+$/;
  $('#input1,#input2').keypress(function (e) {
    var curVal = $(this).val() + String.fromCharCode(e.charCode);
    var length = curVal.length;

    if (length > 6 || !pattern.test(curVal)) {
      e.preventDefault();
    }
  }); 
});

这是我的建议。codepen做了一些不同的事情,因为有更好的方法可以做到这一点,而不是使用昂贵的正则表达式(这并不重要,但我喜欢优化)。

我相信问题在于您制作正则表达式的方式,按下的第一个字母在该函数结束之前不会显示在
$(this).val()
中(这就是为什么您仍然能够使用
e.preventDefault();
);这意味着正则表达式正在测试的val为空,而正则表达式将不匹配

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

比如:

$(document).ready(function () {
  var pattern = /^[0-9]+$/;
  $('#input1,#input2').keypress(function (e) {
    var curVal = $(this).val() + String.fromCharCode(e.charCode);
    var length = curVal.length;

    if (length > 6 || !pattern.test(curVal)) {
      e.preventDefault();
    }
  }); 
});

下面是代码笔的一些不同之处,因为有更好的方法可以做到这一点,而不是使用昂贵的正则表达式(这并不重要,但我喜欢优化)。

补充mazzzzz所说的,您可以使用更强大的模式来测试您想要的:

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

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

作为mazzzzz所说的补充,您可以使用更强大的模式测试您想要的内容:

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

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

这里似乎根本不需要正则表达式

<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>​

var maxLen=6,
helpCodes=[37,39,8,9],//左右箭头,退格,制表符
代码=[];
对于(var代码=48;代码<58;代码++){//数字键(48-57)
代码。推送(代码);
}
$('#input1,#input2')。on('keydown',函数(e){
if(helpCodes.indexOf(e.keyCode)>-1){
返回true;
}
如果(e.shiftKey | | this.value.length==maxLen
||代码。索引of(e.keyCode)<0){
返回false;
}
});
​

这里似乎根本不需要正则表达式

<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>​

var maxLen=6,
helpCodes=[37,39,8,9],//左右箭头,退格,制表符
代码=[];
对于(var代码=48;代码<58;代码++){//数字键(48-57)
代码。推送(代码);
}
$('#input1,#input2')。on('keydown',函数(e){
if(helpCodes.indexOf(e.keyCode)>-1){
返回true;
}
如果(e.shiftKey | | this.value.length==maxLen
||代码。索引of(e.keyCode)<0){
返回false;
}
});
​