preg_match不会正确收集工作

时间:2013-11-21 20:34:55

标签: php preg-match

它似乎工作正常,但如果你输入前导字符,它不检查,如果你输入结束字符,它不检查。

我想确保字符串采用以下格式:

6 Numbers | Hyphen | 1 Number | A-Z any case | Hyphen | 5 Numbers

因此123456-1a-12345123456-1A-12345应该有效。

$string = 'this12345-1A-12345'; // This works, and it shouldn't
$string = '12345-1A-12345this'; // This also works and it shouldn't

$pattern = "([0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5})";
echo preg_match($pattern, $string);

我做错了什么?对不起,我对preg_match很新,我在语法上找不到任何好的库。

2 个答案:

答案 0 :(得分:3)

您可以使用^对行尾进行正则表达式检查,并在结束时使用$

$pattern = "(^[0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5}$)";

此模式仅适用于字符串在规范之前和之后没有任何内容的情况。

答案 1 :(得分:3)

您只能添加锚点来标记模式的开头和结尾(并添加模式分隔符):

$pattern = "~^([0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5})$~";

顺便说一句,您的模式可以缩短为:

$pattern = '~^[0-9]{6}-[0-9][A-Z]-[0-9]{5}$~i';
preg_match($pattern, $string, $match);
print_r($match);