我正在创建一个表单,用户可以在有限的范围内输入多值 我无法重复范围,如下所示,我是否也必须验证逗号,我可以为此获得完整的正则表达式解决方案吗?
我允许用户多次输入该值,范围为0-1000,有效范围为64次或更少
输入可以如下: 1000,0,100,123,10,23,56,654,981
这是我目前的范围正则表达式 (^(?:[0-9] | [1-9] [0-9] | [1-9] [0-9] {2} | 1000)$)
答案 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个或更少的碎片。