使用preg_match:用户#345

时间:2013-02-17 21:38:51

标签: php regex preg-match

我想使用preg匹配,我的用户可以使用这种类型的用户名注册: 名#3digit

我使用#时遇到问题。 这段代码有什么问题:

if (!preg_match("/(\w+)#(?P\d{3})/",$_REQUEST['irc_channel']))

1 个答案:

答案 0 :(得分:0)

你不需要这个部分?P,它的命名子模式的cos。因此,如果您需要,那么可能会使用它。请参阅:PHP: Subpatterns - Manual

这会给你想要的东西;

$r = preg_match('~(\w+)#(\d+)~i', 'user#345', $m);
print_r($r); // 1
print_r($m); // Array([0] => user#345 [1] => user [2] => 345)

$r = preg_match('~(\w+)#(\d+)~i', 'user......#345', $m);
print_r($r); // 0 error!

如果您需要子模式怎么办? (但据我所知,在这种情况下你不需要任何数组结果,只需检查输入是否有效)。

$r = preg_match('~(\w+)#(?P<id>\d+)~i', 'user#345', $m);
print_r($m); // Array([0] => user#345 [1] => user [id] => 345 [2] => 345)

最后;

if (!preg_match('~(\w+)#(\d+)~i', $_REQUEST['irc_channel'])) 
// actually this would work too
if (!preg_match('~\w+#\d+~i', $_REQUEST['irc_channel']))