我如何编写有限范围重复的正则表达式

时间:2014-01-02 02:26:56

标签: regex range

我正在创建一个表单,用户可以在有限的范围内输入多值 我无法重复范围,如下所示,我是否也必须验证逗号,我可以为此获得完整的正则表达式解决方案吗?

我允许用户多次输入该值,范围为0-1000,有效范围为64次或更少

输入可以如下: 1000,0,100,123,10,23,56,654,981

这是我目前的范围正则表达式 (^(?:[0-9] | [1-9] [0-9] | [1-9] [0-9] {2} | 1000)$)

1 个答案:

答案 0 :(得分:5)

简答:

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

(假设您不介意前导零。如果您这样做,请将\d{1,3}更改为更复杂的([1-9][0-9]|[1-9])?[0-9]。)

长版:

我们希望匹配(0-1000范围内的数字)(重复1-64次)。

第一部分可以用(1000|\d{3})完成(上面提到的关于前导零的警告)。

对于第二部分,我们使用一个方便的技巧来做逗号分离方面:我们说每个数字必须 后面跟一个逗号结尾字符串。

请注意,此方法存在一个小弱点:它接受尾随逗号,例如: 1,2,3,匹配。如果你不好,你可以通过添加来适应,但它会使模式更长:

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

请注意,我使用的是明确的{0,63},但许多正则表达式变体也会接受短格式{,63}

另请注意,正则表达式可能不是最好的解决方案 - 最好只将逗号分割输入字符串,然后遍历各个部分,验证每个部分是0-1000之间的数字,有64个或更少的碎片。