前缀为零的正则表达式编号范围

时间:2011-04-14 04:26:08

标签: regex

如何形成正则表达式以验证范围从1到1000,其中数字001与1相同,0245与245相同。我看到的大多数解决方案允许范围检查但不允许数字以0.问题是不允许0,00,000,但允许数字以0开头或不包括。

编辑:它应该允许1,01,001而不是任何超过4位的数字。

5 个答案:

答案 0 :(得分:7)

有几种方法可以做到这一点。我的第一个想法是这样的:

/^0*(1000|[1-9]\d{0,2})$/

说明:

0*消耗任何前导零。之后,您正在寻找1000或1到3位数字,不以零开头。 [1-9]要求至少存在一个非零数字,\d{0,2}之后最多允许两位数(因此仍允许以零结尾的数字)。

答案 1 :(得分:2)

^(1000|0?[1-9][0-9][0-9]|0{0,2}[1-9][0-9]|0{0,3}[1-9])$
或等效的 ^(1000|0?[1-9]\d{2}|0{0,2}[1-9]\d|0{0,3}[1-9])$
将会做到这一点:所有从0001到1000,有或没有前导0但不超过4位:

  • 第一组:仅1000,没有领先0
  • 第二组:100-999,最多1个领先0
  • 第3组:10-99,最多2个领先0
  • 第4组:1-9,最多3个领先0

答案 2 :(得分:2)

这里怎么样:

^(1000|(?=\d{1,4})0*[1-9]\d{0,2})$

这是我认为最短的解决方案,它将允许的最大数字限制为4,将最大数字限制为1000.

我用锚点检查开始和结束,以防止有其他东西。然后检查1000.第二部分是不同的部分。

(?=\d{1,4})是一个零长度前瞻断言。这意味着一个非消费的东西,只检查是否有1到4个数字。如果这是真的那么继续,否则不匹配。然后检查结果是否有前导0和最多3个数字。

可在此处在线查看:http://regexr.com

答案 3 :(得分:0)

myregexp.com

regexp:^(0+)?(?=\d{1,4})([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|1000)$

0001000匹配 0001001并不匹配 0..1000场比赛 1000以上的任何东西都不匹配

答案 4 :(得分:0)

/^((1000)|(0\d{1,3})|(\d{1,3}))$/

匹配

1000
100
0001
01
1
010
0010
0100

不匹配

10000
00001

http://refiddle.com/10l

提供的证明