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

时间:2013-12-27 17:56:37

标签: javascript jquery regex

正则表达式:/^[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工作。谢谢!

3 个答案:

答案 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) )