我需要一个正则表达式,它可以匹配由逗号分隔的1到1000的数字字符串。
例如:12,561001909001000
我在前端使用javascript,在后端使用php进行验证。理想情况下,我需要一个通用的正则表达式,它对两者都适用。
范围在1-1000之间的数字,用逗号分隔,由匹配
(?<=,|^)([1-9][0-9]{0,2}|1000)(?=,|$)
如果你想匹配整行,那么像这样的东西应该做:
^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$
根据您的要求,您可能还希望在逗号的开头、结尾和/或后面添加空白。
这将在开头允许空白:^s*([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*$
这将允许末尾出现空白:^([1-9][0-9]{0,2}|1000)(,([1-9][0-9]{0,2}|1000))*s*$
这将允许逗号后面有空格:^([1-9][0-9]{0,2}|1000)(,s*([1-9][0-9]{0,2}|1000))*$
根据你的喜好组合这些。
编辑2:如果您想在装箱或末尾允许使用逗号,那么您的正则表达式将变为
^,?([1-9][0-9]{0,2}|1000)(,s*([1-9][0-9]{0,2}|1000))*,?$
这里,,?
表示可以有0或1个逗号。
编辑:解释,根据要求:
- 开头的
^
和结尾的$
是输入标记的开始/结束-它们确保我们测试整个输入 - 括号的作用正如你所期望的那样
[1-9]
匹配数字1到9,类似地[0-9]
匹配数字0到9{0,2}
表示前一部分(在我们的情况下为[0-9]
)出现在0到2次之间|
是逻辑OR
——匹配之前的部分或匹配之后的部分
因此,在第一组括号中,我们匹配数字1到9,然后是0、1或2个数字0到9-这给出了1到999之间的数字-或者我们匹配1000。
然后,我们匹配一个逗号,后跟如上所述的相同块,并且该批次匹配0次或更多次,如括号后的*
字符所示。