-1

我需要一个正则表达式,它可以匹配以逗号分隔的从 1 到 1000 的数字字符串。

例如:12,56,100,190,900,1000

我在前端使用 javascript,在后端使用 php 进行验证。理想情况下,我需要一个通用的正则表达式,它适用于两者。

4

2 回答 2

3

1-1000 范围内的数字(以逗号分隔)匹配

(?<=,|^)([1-9][0-9]{0,2}|1000)(?=,|$)
于 2012-10-16T07:14:10.587 回答
2

如果你想匹配整行,那么应该这样做:

^([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 次或更多次 - 如*括号后的字符所示。

于 2012-10-16T07:20:17.013 回答