匹配字符串格式“1,22,3,44”的正则表达式

时间:2013-05-31 15:55:59

标签: php regex

我试过了:

preg_match("/((\d)+,?)+/",$string)

它返回正确的结果:

  

1,2,3,4,5

但它也符合:

  

1,2A

     

1aaaa

     

1,2,3,

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你可以做到

^\d+(,\d+)*$

第一个^\d+匹配字符串的开头和数字。然后,您可以选择匹配逗号后跟数字(并且组可以存在0或倍数)。最后$匹配字符串的结尾。确保在最后一个号码后没有任何内容。

这是一个显示表达式如何工作的状态机:

Regular expression image

Edit live on Debuggex

这可以匹配,例如:81,2,4 但不匹配:8,,21,2a

答案 1 :(得分:1)

您可以使用锚点^$来阻止其他匹配:

preg_match("/^((\d)+,?)+$/",$string)
             ^          ^

虽然......你的表情可能会更好:

preg_match("/^\d+(,\d+)*$/",$string)

((\d)+,?)+发生的事情是,它与找到的前几个字符匹配,一旦完成,就表示匹配。

锚点^$分别表示字符串的开头和字符串的结尾,这意味着开头必须匹配到结尾。

答案 2 :(得分:0)

试试这个:

preg_match('~^(?:\d+(?:,(?!$)|$))+$~', $string);