它似乎工作正常,但如果你放前导字符,它不会检查,如果你放结束字符,它也不会检查。
我想确保字符串的格式是:
6 Numbers | Hyphen | 1 Number | A-Z any case | Hyphen | 5 Numbers
所以像这样123456-1a-12345
和123456-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}$)";
只有当字符串在您的规范前后没有任何内容时,此模式才会适用。