我试过了:
preg_match("/((\d)+,?)+/",$string)
它返回正确的结果:
1,2,3,4,5
但它也符合:
1,2A
1aaaa
1,2,3,
我该如何解决这个问题?
答案 0 :(得分:3)
你可以做到
^\d+(,\d+)*$
第一个^\d+
匹配字符串的开头和数字。然后,您可以选择匹配逗号后跟数字(并且组可以存在0或倍数)。最后$
匹配字符串的结尾。确保在最后一个号码后没有任何内容。
这是一个显示表达式如何工作的状态机:
这可以匹配,例如:8
,1,2,4
但不匹配:8,
,,2
或1,2a
答案 1 :(得分:1)
您可以使用锚点^
和$
来阻止其他匹配:
preg_match("/^((\d)+,?)+$/",$string)
^ ^
虽然......你的表情可能会更好:
preg_match("/^\d+(,\d+)*$/",$string)
((\d)+,?)+
发生的事情是,它与找到的前几个字符匹配,一旦完成,就表示匹配。
锚点^
和$
分别表示字符串的开头和字符串的结尾,这意味着开头必须匹配到结尾。
答案 2 :(得分:0)
试试这个:
preg_match('~^(?:\d+(?:,(?!$)|$))+$~', $string);