preg_match获胜';收集工作不正确


preg_match won't collect work correctly

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

我想确保字符串的格式是:

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的新手,我找不到任何好的语法库。

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

$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);

您可以使用^让正则表达式检查行首,$检查行尾。

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

只有当字符串在您的规范前后没有任何内容时,此模式才会适用。