-1

ユーザーが次のタイプのユーザー名で登録できるpregmatchを使用したい:name#3digit

#の使用に問題があります。このコードの問題は何ですか:

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

1 に答える 1

0

この部分は必要ありません?P。その名前はサブパターンです。したがって、必要に応じて、それを適切に使用することができます。参照:PHP:サブパターン-マニュアル

これはあなたが望むものを与えるでしょう。

$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'])) 
于 2013-02-17T22:07:00.570 に答える