为什么我的Javascript正则表达式量词是;不工作;?

为什么我的Javascript正则表达式量词是;不工作;?,javascript,regex,Javascript,Regex,这个问题似乎有一个简单的答案,对我来说是一个灰暗的答案,我希望你只是评论,然后我可以在解决后删除该线程。;) 我的正则表达式中的{n}量词有问题。它似乎不起作用 这是我的密码 document.time.Id.onkeyup = function() { var that = this.value, regex = /^[1-9]{1}/ if (that) { if (!that.match(regex)) { this.nextSib

这个问题似乎有一个简单的答案,对我来说是一个灰暗的答案,我希望你只是评论,然后我可以在解决后删除该线程。;)

我的正则表达式中的
{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时,会出现匹配失败,任何字母也会出现匹配失败…所以它“稍微”起作用


你能帮个忙吗?

你的正则表达式要求匹配任何开始的字符串(因为它是使用
^
在开始处锚定的)和1到9之间的任何数字。这就是它与0或字母不匹配的原因

范围验证是您希望使用基本数字比较进行检查的内容:

var numberValue = parseInt(this.value, 10);
if (numberValue >= 1 && numberValue <= 100) {
    // valid number
}

正则表达式要求将任何开始的字符串(因为它使用
^
锚定在开头)与1到9之间的任何数字匹配。这就是它与0或字母不匹配的原因

范围验证是您希望使用基本数字比较进行检查的内容:

var numberValue = parseInt(this.value, 10);
if (numberValue >= 1 && numberValue <= 100) {
    // valid number
}

请尝试改用此正则表达式:

^[1-9][0-9]?$|^100$
您使用的量词实际上是多余的,因为
[1-9]
[1-9]{1}
的意思是相同的

如果使用当前代码和正则表达式输入
1000
,则数字将通过,因为只要正则表达式与字符串的任何部分匹配,匹配项就会计数。使用
$
(行尾锚点)强制正则表达式检查整个字符串

但您可能应该使用一个简单的
if
检查

if (that > 0 && that <= 100 && that % 1 == 0) {
    ...
}

if(that>0&&that尝试改用此正则表达式:

^[1-9][0-9]?$|^100$
您使用的量词实际上是多余的,因为
[1-9]
[1-9]{1}
的意思是相同的

如果使用当前代码和正则表达式输入
1000
,则该数字将通过,因为只要正则表达式与字符串的任何部分匹配,匹配就会计数。使用
$
(行尾锚点)强制正则表达式检查整个字符串

但您可能应该使用一个简单的
if
检查

if (that > 0 && that <= 100 && that % 1 == 0) {
    ...
}


if(that>0&&that首先,为什么要使用RegEx?:)@thefourye我需要在客户端验证数字是否在1到100之间。这实际上是一个家庭作业,所以我必须使用它,但还有什么其他方法?;)您只需检查
是否是一个数字,以及它是否在0和100之间。首先,为什么要使用RegEx进行此操作?:)@接下来,我需要在客户端验证数字是否在1到100之间。这实际上是一个家庭作业,所以我必须使用它,但还有什么其他的方法呢?;)您只需检查
那是不是一个数字,它是否在0和100之间。谢谢,我知道了。但是我“需要”使用正则表达式,我仍然想知道为什么量词不起作用@dollarvar量词只表示匹配1到9之间任何数字的一次出现。确保不要将
[1-9]
与数字范围验证混淆!这只是
[123456789]
的简写符号。我明白了。但是我如何得到
[1-9]{1}
应该只匹配1和9之间一个数字的一次出现?我说得对吗?@dollarvar是真的,但是
[1-9]
也是
{1}
是多余和不必要的,就像将0添加到某物或将某物乘以1(至少在实数范围内)。@dollarvar简单地说,
^
匹配字符串的开头,而
$
匹配其结尾。如果没有所谓的锚点
$
,您只是说字符串需要以1到100之间的任何数字开头,使例如
42foobar
成为有效的输入。通过添加
$
,您可以确保号码后面没有任何内容。谢谢,我明白了。但是我“需要”使用正则表达式,我仍然想知道为什么量词不起作用@dollarvar量词只表示匹配1到9之间任何数字的一次出现。确保不要将
[1-9]
与数字范围验证混淆!这只是
[123456789]
的简写符号。我明白了。但是我如何得到
[1-9]{1}
应该只匹配1和9之间一个数字的一次出现?我说得对吗?@dollarvar是真的,但是
[1-9]
也是
{1}
是多余和不必要的,就像将0添加到某物或将某物乘以1(至少在实数范围内)。@dollarvar简单地说,
^
匹配字符串的开头,而
$
匹配其结尾。如果没有所谓的锚点
$
,您只是说字符串需要以1到100之间的任何数字开头,使例如
42foobar
成为有效的输入。通过添加
$
,您可以确保数字后面没有任何内容。请注意,您的正则表达式不包含任何两位数字。现在它不包含一位数字。谢谢,我希望最后使用的正则表达式是
/^([1-9]{1}][1-9][0-9]{1}100)/
。匹配一位数字所需的数字。;)那么为什么量词不起作用呢?它也匹配111@dollarvar,因为没有一个部分是可选的,这也是Jerry的regex的问题。问号量词
使表达式的某些部分成为可选的。一个
{1}
量词是绝对多余的,不会改变任何东西。@dollarvar啊,
$
匹配行尾,所以如果你有
^[1-9][0-9]?$
比如说123,那么正则表达式将首先匹配
^
(行首),然后匹配两个数字
1
2
,然后尝试匹配行尾,但它看到另一个数字(3)。因此匹配失败。请注意,您的正则表达式不包含任何两位数字。现在它不包含一位数字。谢谢,我想要的正则表达式没有