Javascript AND和OR运算符、正则表达式和值长度
我试图用它来阻止输入任何非数字的和输入值长度不大于6的内容。现在,如果输入包含alpha,它会阻止任何超过6个字符的内容。但是当我把它改为block时,如果它是alpha或者大于6个字符,我就根本无法输入任何内容。有什么想法吗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')
<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;
}
});