2013-02-17 80 views
-1

我想用預浸料的比賽,我的用戶可以使用這種類型的用戶名寄存器: 名稱#3digit使用的preg_match:用戶#345

我用#問題。 這是什麼代碼的問題:你不需要這部分?P

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

回答

0

,它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']))