0

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

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

有效值为:5-123456789

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

提前致谢!

4

2 回答 2

4

问题是您指定了错误的数字:[\0-9]匹配索引在零和索引之间的任何字符9-- 在 ASCII 术语中,索引为 0 到 57 的字符。连字符的索引为 45,因此是允许的。发生这种情况是因为\0被解释为八进制转义序列。

您应该使用[0-9]{5,15}or\d{5,15}代替。您还可以稍微简化正则表达式;/^5-\d{5,15}$/是正确的和更短的。

于 2013-10-15T13:35:25.143 回答
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'])
于 2013-10-15T13:41:22.537 回答