正则表达式编号保留

时间:2015-05-10 13:54:29

标签: php html regex

下午好,我正在创建一个带有号码预订字段的表单供用户选择。我所拥有的系统只允许按号码预订号码,例如:1,2,3,它会预订号码1,2和3.

现在我想添加一次预订多个数字的选项,例如:1-5,9,10,在这种情况下,它会预订1到5,9和10的数字。

我使用以下正则表达式代码,但它无法正常工作

^\d{1,5}(?:-\d{1,5})*(?:,\d{1,5})*(?:,\d{1,5}-\d{1,5})*(?:-\d{1,5},\d{1,5})*$

此代码的问题是每当用户插入两个1-3,4-6时,它只允许一个数字。例如,1-3,4-6,2,3在插入,3时显示错误。

还有一个问题,它允许写几个破折号而不用逗号 示例1-3-6-8-9

1 个答案:

答案 0 :(得分:1)

也许是这样的:

\A\d{1,5}(?:-\d{1,5})?(?:,\d{1,5}(?:-\d{1,5})?)*\z

这个想法:

  • 范围是可选的(?:-\d{1,5})?(并且在第一个数字后面)
  • 包含逗号后跟数字或范围的组可以出现零次或多次

请注意,正则表达式无法解决问题,因为始终可以使用6-41-5,2,3,4。因此,您迟早需要爆炸字符串并检查数字和范围是否一致。