章: 第6章: 実践運用と成長
郵便番号・電話番号・URLの形式チェック、if文を何行も書いていませんか?正規表現を使えば1行で書けます。
問題と解決策
入力形式の検証を strlen()、substr()、is_numeric() などの組み合わせで書こうとすると、コードが複雑になりがちです。しかも条件の漏れによるバグも起きやすくなります。
正規表現(Regular Expression)は、文字列のパターンを記号で表現する言語です。preg_match() を使えば、複雑なルールを1行で表現でき、マッチした部分を取り出す(preg_match_all())、置換する(preg_replace())ことも可能です。
正規表現主要関数の比較
| 関数 | 用途 | 戻り値 |
preg_match($pattern, $str) |
パターンに一致するか検査 | 1(一致)/ 0(不一致)/ false(エラー) |
preg_match_all($pattern, $str, $matches) |
全一致箇所を取得 | 一致数 |
preg_replace($pattern, $replace, $str) |
パターンを置換 | 置換後の文字列 |
preg_split($pattern, $str) |
パターンで分割 | 配列 |
チェックポイント: 正規表現のデリミタ(区切り文字)は
/ ... /が一般的ですが、パターン内に/が含まれる場合は# ... #や| ... |に変えることでエスケープを減らせます。
コードサンプル
<?php
$zip = '123-4567';
if (preg_match('/^\d{3}-\d{4}$/', $zip)) {
echo '郵便番号形式OK';
}
まとめ & 次のステップ
preg_match()でパターン一致を検証し、preg_replace()で置換できます^(先頭)と$(末尾)で入力全体がパターンに一致するか検査できます\d(数字)、\w(英数字)、+(1回以上)、*(0回以上)が基本記号です- 正規表現は最初は読みにくいですが、よく使うパターン(メール・電話番号等)を手で書いて覚えましょう
次回は デバッグ — 原因特定を速くするPHPのデバッグ技法を学びます。