我想要一个只接受字母和一个连字符的正则表达式。该值必须以 5-(五个和一个连字符)开头,之后只有 5-15 个数字。
我目前正在使用:preg_match('/^[5]-{1}[\0-9]{5,15}$/', $_POST['value'])
有效值为:5-123456789
我的正则表达式接受两个连字符,例如 5--123456789。它必须以 5、一个连字符和 5-15 个数字开头。我该怎么做?
提前致谢!
问题是您指定了错误的数字:[\0-9]
匹配索引在零和索引之间的任何字符9
-- 在 ASCII 术语中,索引为 0 到 57 的字符。连字符的索引为 45,因此是允许的。发生这种情况是因为\0
被解释为八进制转义序列。
您应该使用[0-9]{5,15}
or\d{5,15}
代替。您还可以稍微简化正则表达式;/^5-\d{5,15}$/
是正确的和更短的。
您在 0 之前使用了 \,这意味着它不是 0-9 的范围,而是 0 和 -9,所以这是您的第二个连字符(但它是可选的,因为在括号 [] 中)。只需从括号中删除此 \。像这样离开它:
preg_match('/^[5]-{1}[0-9]{5,15}$/', $_POST['value'])
即使这个符号是正确的:
preg_match('/^5-[0-9]{5,15}$/', $_POST['value'])