我想要一个只接受字母和一个连字符的正则表达式。该值必须以5-(五个和一个连字符)开头,后面只有5-15个数字。
我目前正在使用:preg_match('/^[5]-{1}[\0-9]{5,15}$/', $_POST['value'])
有效值为:5-123456789
我的正则表达式接受两个连字符,如5--123456789。它必须以5,一个连字符和5-15个数字开头。我该怎么办?
提前致谢!
答案 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'])