正则表达式:/^[1-9][0-9]*$/
正则表达式在 http://www.phpliveregex.com 上按预期工作
我的问题是它在使用 JS 实现时不起作用,请参阅我的代码 http://jsfiddle.net/LHHU7
JS:
$("#mytextbox").on("keypress", function(event) {
var re = /^[1-9][0-9]*$/;
var key = doKey(arguments[0] || window.event);
var char = String.fromCharCode(key);
if (key == 8 || key == 37 || key == 39 || re.test(char)) {
return true;
}
return false;
});
$('#mytextbox').on("paste",function(e)
{
e.preventDefault();
});
function doKey(event) {
var key = event.keyCode | event.charCode;
return key;
}
预期的测试用例:0001 fail
11 11 fail
1000 success
1264 success
5001 success
我的代码发生了什么:0001 fail WORKING
11 11 fail WORKING
1000 success NOT WORKING
1264 success WORKING
5001 success NOT WORKING
由于某种原因,不会输入 0。我已经尝试过铬,但没有成功。我尝试多次更改我的正则表达式,但没有不同的结果。我也在我的代码上尝试了不同的实现,但仍然没有成功。
在发布您的答案之前,请查看您是否可以在我的 jsfiddle 上使用它。谢谢!
当您可能真的想匹配文本框的内容 + 字符时,您只是根据正则表达式检查单个字符(最新字符)。这使得根本不可能输入零,因为它将始终与 ^[1-9]
.
匹配现有的文本框值+字符应该效果更好;
if (key == 8 || key == 37 || key == 39 ||
re.test(document.getElementById("mytextbox").value + char)) {
return true;
}
正如@Joachim Isaksson提到的,你只看最后一个字符,所以你的正则表达式是错误的。将正则表达式更新为:
var re = /^[0-9]$/;
这将匹配一个数字 0-9。
将以下内容编辑到您的代码中,它工作正常 演示
var testString=$('#mytextbox').val();
if (key == 8 || key == 37 || key == 39 || re.test(testString + char) )