preg_match("/((\d)+,?)+/",$string)
它返回正確的結果爲:
1,2,3,4,5
,但它也有相匹配:
1,2A
1aaaa
1,2,3,
我怎樣才能解決這個問題?
preg_match("/((\d)+,?)+/",$string)
它返回正確的結果爲:
1,2,3,4,5
,但它也有相匹配:
1,2A
1aaaa
1,2,3,
我怎樣才能解決這個問題?
試試這個:
preg_match('~^(?:\d+(?:,(?!$)|$))+$~', $string);
您可以使用錨^
和$
防止其他比賽:
preg_match("/^((\d)+,?)+$/",$string)
^ ^
雖然......你的表達可能是這樣的美好:
preg_match("/^\d+(,\d+)*$/",$string)
什麼用((\d)+,?)+
情況是,它匹配它找到的前幾個字符,一旦完成,就表示匹配。
錨點^
和$
分別表示字符串的開始和字符串的結束,意思是開始必須匹配直到結束。
'1 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,' –
你可以對字符串和數字的開始做
^\d+(,\d+)*$
第一^\d+
比賽。然後,您可以選擇匹配逗號後跟一個數字(並且該組可以出現0次或多次)。最後匹配字符串的末尾$
。確保最後一個號碼後沒有任何內容。
這裏是表示表達如何工作的狀態機:
這可匹配,例如:8
,1,2,4
。
但不會匹配:8,
,,2
或1,2a
對不起,不把它放回到php cpde,但寫手機已經夠難了! –
我忘了提及那個字符串也有效,即使是單個號碼 –
我仍然認爲這是一個更好的答案。輕鬆修改以接受字母數字字符。 – crush
你想匹配'1,22,3,44'或'1,2,3,4'?你只是想匹配逗號分隔的數字嗎? – crush
我只是想匹配以逗號分隔的數字,而不是以逗號結尾 –