这个问题对我来说似乎有一个简单的答案和一个令人惭愧的问题,我希望你只是评论,然后我可以在解决后删除该帖子。 ;)
我的RegEx中的{n}
量词存在问题。它似乎不起作用!
这是我的代码
document.time.Id.onkeyup = function() {
var that = this.value,
regex = /^[1-9]{1}/
if (that) {
if (!that.match(regex)) {
this.nextSibling.innerHTML="Number must be between '1' and '100'.";
} else {
this.nextSibling.innerHTML="";
}
} else {
this.nextSibling.innerHTML="";
}
}
正如你所看到的,我想在最后匹配1到100,但我陷入困境,量词不起作用。当我键入0时,匹配失败,以及任何字母......所以它确实“有点”。
你能帮帮我吗?
答案 0 :(得分:4)
你的正则表达式表示匹配任何开头的字符串(因为它使用^
锚定在开头时使用1到9之间的任何数字。这就是它与0或字母不匹配的原因。
您需要使用基本数字比较来检查范围验证:
var numberValue = parseInt(this.value, 10);
if (numberValue >= 1 && numberValue <= 100) {
// valid number
}
为了完整起见,您可以为此目的创建一个正则表达式我不推荐,但:
^(?:[1-9][0-9]?|100)$
答案 1 :(得分:2)
请尝试使用此正则表达式:
^[1-9][0-9]?$|^100$
您使用的量词实际上是多余的,因为[1-9]
和[1-9]{1}
意味着相同的事情。
如果您使用当前代码和正则表达式输入1000
,则数字将通过,因为只要正则表达式匹配字符串的任何部分,匹配就会计算。使用$
(行尾锚点)强制正则表达式检查整个字符串。
但你可能应该使用简单的if
检查。
if (that > 0 && that <= 100 && that % 1 == 0) {
...
}