它似乎工作正常,但如果你输入前导字符,它不检查,如果你输入结束字符,它不检查。
我想确保字符串采用以下格式:
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
很新,我在语法上找不到任何好的库。
答案 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);