JavaScript中用于验证1-10的正则表达式

8

如何编写正则表达式匹配1-10和1-5的数字?请帮助这个苦恼的人。


1
你为什么要首先使用正则表达式来做这件事呢? - Pointy
1
为什么要使用正则表达式进行数字范围测试? - Phil
1
正则表达式不是处理这个问题的正确工具。请使用普通的数字比较。 - Felix Kling
@Phil - 还要检查 "isNaN()" ... - Pointy
@Pointy 你可以检查一下,但是与 NaN 进行数字比较的结果无论如何都会返回 false。 - Phil
显示剩余3条评论
7个回答

11

你可以使用 JavaScript 中简单的数字检查来实现这一点:

// Convert input to integer just to be sure
mynum = parseInt(mynum, 10);

// Check number-range
if(mynum >= 1 && mynum <=10)
and
if(mynum >= 1 && mynum <=5)

如果你真的想使用正则表达式:

/^([1-9]|10)$/
and
/^[1-5]$/

更新:

  • 修正了第一个正则表达式的问题,以正确匹配字符串边界。
  • 在第一个示例中添加了parseInt以确保正确的数字检查。

1
第一个正则表达式匹配0。 :-) - Denis de Bernardy
1
parseInt()(大写I)应该给出基数参数。parseInt(mynum, 10) - user113716
3
正则表达式仍然不准确。 ^ 仅适用于第一个选项,而 $ 仅适用于数字 10。因此,5555xxxxx10 都将匹配成功。 - mario
1
你想让我发疯,是吗?:) 感谢您的输入。 - marsbear

4

这不是正则表达式的好用法。

使用简单条件:

if (x > 0 && x < 6) {
  // x is 1 - 5
}

if (x > 0 && x < 10) {
  // x is 1 - 10
}

3

对于1-5,您只需要将其作为字符类括起来:

  /^[1-5]$/

在1-10的情况下,您只需要增加一个额外的选项:

  /^([1-9]|10)$/

如果输入为“03”或“3.0”,该怎么办? - user113716
@patrick:两者都应该在该测试中失败。如果需要整数或浮点数比较而不是字符串格式验证,则正则表达式的工作量太大了。 - mario
考虑到这是用于验证(可能是用户输入),我认为应该考虑这些可能性,并且我同意“正则表达式太费劲了”。 - user113716
@patrick: 如果真的要用Javascript验证,我会说这太费力了。然而,如果将其用作“<input pattern= regex”,它可以节省一些打字时间。(但是,使用type=numbermin= max=也可以实现相同效果) - mario

2

你想使用正则表达式的原因是什么?

/([1-9]|10)/

1

使用数字比较。以下的数字扩展可以检查一个数字是否在两个值之间:

Number.prototype.between = 
  function(lower,upper, includeBoundaries){
    lower = Number(lower);
    upper = Number(upper);
    noCando = isNaN(lower) || 
              isNaN(upper) || 
              lower>=upper;
    if ( noCando ) {
      throw 'wrong arguments or out of range';
    }
    return includeBoundaries
           ? this >= lower && this <= upper
           : this > lower && this < upper
};
// usage:
(12).between(1,12); /=> false
(12).between(1,12,true); /=> true
(12).between(0,15,true); /=> true
(0).between(-5,1); //=> true

该函数将参数转换为数字,因为在JavaScript中0可以评估为布尔值,以便能够检查参数是否为实数值,并能够检查下限是否不大于/等于上限。在这些情况下会抛出错误。 includeBoundaries 参数还检查数字是否等于下限或上限,如果未提供,则函数返回真正的“between”检查。

1

对于1-10,可以是:

/^([1-9]|10)$/

而对于1-5,只需要

/^[1-5]$/

1
答案将会是。
/^([1-9]|10)$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接