正则表达式:/^[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。我已经尝试过使用chrome,但没有成功。我已经尝试多次更改我的RegExp而没有不同的结果。我也在我的代码上尝试了不同的实现,但仍然没有成功。
在发布答案之前,请查看是否可以让我的jsfiddle工作。谢谢!
答案 0 :(得分:0)
当您可能真的想要匹配文本框+字符的内容时,您只会针对正则表达式检查单个字符(最新的字符)。这使得根本无法输入零,因为它总是与^[1-9]
匹配。
匹配现有的文本框值+字符应该更好用;
if (key == 8 || key == 37 || key == 39 ||
re.test(document.getElementById("mytextbox").value + char)) {
return true;
}
答案 1 :(得分:0)
正如@Joachim Isaksson所提到的,你只是看着最后一个角色,所以你的正则表达式是错误的。将正则表达式更新为:
var re = /^[0-9]$/;
这将匹配一个数字0-9。
答案 2 :(得分:0)
将以下内容修改为您的代码,它可以正常使用DEMO
var testString=$('#mytextbox').val();
if (key == 8 || key == 37 || key == 39 || re.test(testString + char) )