如何形成正则表达式以验证范围从1到1000,其中数字001与1相同,0245与245相同。我看到的大多数解决方案允许范围检查但不允许数字以0.问题是不允许0,00,000,但允许数字以0开头或不包括。
编辑:它应该允许1,01,001而不是任何超过4位的数字。
答案 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位:
答案 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
提供的证明