Php 预赛获胜';收集工作不正确

Php 预赛获胜';收集工作不正确,php,preg-match,Php,Preg Match,它似乎工作正常,但如果你放了前导字符,它不会检查,如果你放了结尾字符,它也不会检查 我要确保字符串的格式如下: 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

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

我要确保字符串的格式如下:

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\u match
非常陌生,我找不到任何好的语法库。

您可以使用
^
对行的开头进行正则表达式检查,对行的结尾进行
$
检查

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

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

您可以使用
^
对行的开头进行正则表达式检查,对行的结尾进行
$
检查

$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}-[0-9][A-Z]-[0-9]{5}$~i';
preg_match($pattern, $string, $match);
print_r($match);

()
是分隔符。我不知道这一点,以为它们只用于定义组-谢谢
()
是分隔符。我不知道这一点,以为它们只用于定义组-谢谢!*有关一些有用的工具或更好的教程,请参见和。*有关一些有用的工具或更好的教程,请参见和。
~
做什么,
~i
做什么?你能解释一下吗?@deceze:是的,我知道,括号可以用作分隔符,但这是最糟糕的选择,因为它在正则表达式模式中非常模糊。因此,如果
~
是新的分隔符,那么
I
的作用是什么?@Arian:你可以使用的最好的分隔符是你确定不会在你的模式中写入的字符。这并不总是可能的,但是当我看到人们使用
/
作为分隔符来对待XML时,就像…@Arian:检查deceze链接,你会发现你可以使用几种类型的分隔符。
~
做什么,
~I
做什么?你能解释一下吗?@deceze:是的,我知道,括号可以用作分隔符,但这是最糟糕的选择,因为它在正则表达式模式中非常模糊。因此,如果
~
是新的分隔符,那么
I
的作用是什么?@Arian:你可以使用的最好的分隔符是你确定不会在你的模式中写入的字符。这并不总是可能的,但当我看到人们使用
/
作为分隔符来对待XML时,就像…@Arian:check deceze link一样,你会发现你可以使用几种类型的分隔符。