正则表达式整数,jquery 和 test() 无法正常工作



正则表达式:/^[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) )

最新更新