PHP:preg_match - >数字和一个连字符

时间:2013-10-15 13:33:53

标签: php regex numbers

我想要一个只接受字母和一个连字符的正则表达式。该值必须以5-(五个和一个连字符)开头,后面只有5-15个数字。

我目前正在使用:preg_match('/^[5]-{1}[\0-9]{5,15}$/', $_POST['value'])

有效值为:5-123456789

我的正则表达式接受两个连字符,如5--123456789。它必须以5,一个连字符和5-15个数字开头。我该怎么办?

提前致谢!

2 个答案:

答案 0 :(得分:4)

问题是您指定了错误的数字:[\0-9]匹配索引介于零和9之间的任何字符 - 以ASCII术语表示索引为0到57的字符。连字符包含指数为45,所以允许。这是因为\0被解释为octal escape序列。

您应该使用[0-9]{5,15}\d{5,15}代替。你也可以在一定程度上简化正则表达式; /^5-\d{5,15}$/正确且更短。

答案 1 :(得分:1)

你在0之前使用\,这意味着它不是0-9但是0和-9的范围,所以这是你的第二个连字符(但它是可选的,因为括号[])。只需从括号中删除\。保持这样:

preg_match('/^[5]-{1}[0-9]{5,15}$/', $_POST['value'])

即使这种表示法也是正确的:

preg_match('/^5-[0-9]{5,15}$/', $_POST['value'])