2014-09-28 55 views
0

我有問題功能檢查使用正則表達式驗證產品標籤。我想得到值1,2,3(最後不是「」,例如:1,2,3或1,2,3,4,4,5)。以下是我的代碼。正則表達式標籤輸入自動完成

$pat = '/^[0-9]+[,].$/'; 
if(preg_match($pat, $str)) 
{ 
return TRUE; 
} else { 
return FALSE; 
} 

結果:

  • 1,2,3 - >返回False。 (需要返回TRUE)
  • 1,2,3, - > return false。
  • 1,2, - >返回false
  • 1 - >返回false(需要返回TRUE)

所以只有1,2 - >返回true

(英文不好,請幫我)

回答

1

使用正則表達式如下驗證逗號分隔的數字串,

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

這也讓唱號碼。

DEMO

OR

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

這將不允許單個數字(沒有逗號)。

DEMO

加入A後每++*因爲這會避免Catastrophic Backtracking

+0

它運行良好。非常感謝:D – 2014-09-28 11:42:33

+1

這個人可能或可能不是我@Jongware。閱讀更多:[Explosive Quantifiers](http://www.rexegg.com/regex-explosive-quantifiers.html),[ReDoS - Wikipedia](http://en.wikipedia.org/wiki/ReDoS)。 – Unihedron 2014-09-28 11:54:38

0
^(?!.*,$)(?>\d+,?)+$ 

試試看這個。

http://regex101.com/r/lS5tT3/83

+0

快速失敗,適用於輸入字符串較短時,但有回溯問題。將第二組更改爲'(?>)'。 – Unihedron 2014-09-28 11:47:55