2014-09-28 57 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