我试图阻止输入任何非数字和输入值长度不超过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>
答案 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>