为什么我的Javascript RegEx量词“不起作用”?

时间:2014-01-04 11:58:08

标签: javascript regex

这个问题对我来说似乎有一个简单的答案和一个令人惭愧的问题,我希望你只是评论,然后我可以在解决后删除该帖子。 ;)

我的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时,匹配失败,以及任何字母......所以它确实“有点”。

你能帮帮我吗?

2 个答案:

答案 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) {
    ...
}