ユーザーが次のタイプのユーザー名で登録できるpregmatchを使用したい:name#3digit
#の使用に問題があります。このコードの問題は何ですか:
if (!preg_match("/(\w+)#(?P\d{3})/",$_REQUEST['irc_channel']))
ユーザーが次のタイプのユーザー名で登録できるpregmatchを使用したい:name#3digit
#の使用に問題があります。このコードの問題は何ですか:
if (!preg_match("/(\w+)#(?P\d{3})/",$_REQUEST['irc_channel']))
この部分は必要ありません?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']))