【初学者は避けがち】PHPの正規表現で郵便番号を判定する

皆さん正規表現と聞くと、「うっ。。。」となりませんか?

正直、僕はなります。

最近は、なんとなく理解できるようになってきましたが、

できれば正規表現は避けたい。。。

そんな気持ちがまだあります。

特にPHPの初学者にとっては、「正規表現は後回しにして、他のことを学習したい」そんな方も多いと思います。

今日は、そんな正規表現に苦手意識のある方に向けて、コピペで使えるハイフンつきの郵便番号を正規表現で判定するプログラムを紹介します。

僕も今までたくさんgoogle検索で正規表現を丸々コピーしてきたので、お役に立てれば幸いです。

今日の記事は、

  • 正規表現はさくっとコピペで終わらせたい
  • 少しだけ正規表現を勉強したい
  • 現場で郵便番号の正規表現を頼まれたが、皆目検討もつかない

こんな方におすすめの記事です。

それでは、学習していきましょう。

正規表現を使って郵便番号を判定する

いきなりコードから貼り付けておきます。

すぐ使いたいという方は、ここのコードをコピーして試してみてください。

まずは、formのHTMLです。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>
  <body>
    <form action="submit.php" method="POST">
      <label for="postal_code">郵便番号を入力してください:</label>
      <input type="text" id="postal_code" name="postal_code" value="">
      <p>
        <input type="submit" value="送信する">
      </p>
    </form>
  </body>
</html>

次が、郵便番号を受け取るsubmit.phpです。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <pre>
            <?php
                $postal_code = $_POST['postal_code'];
                $postal_code = mb_convert_kana($postal_code, 'a', 'UTF-8');
                print($postal_code);
                if (preg_match("/\A\d{3}[-]\d{4}\z/", $postal_code)) {
                    $postal_code;
                } else {
                    $postal_code = substr($postal_code ,0,3) . "-" . substr($postal_code ,3);
                }
            ?>
            郵便番号: <?php print(htmlspecialchars($postal_code, ENT_QUOTES)); ?><br>
        </pre>
    </body>
</html>

以下ですこーしだけ正規表現について解説しますが、「解説よりもすぐ終わらせたい」という方はここまでで大丈夫です。

正規表現って難しいですよね。

僕もプログラミングを学習し始めた時は、コピペで終わらせていました。

その気持ちめちゃくちゃよくわかります。

正規表現の前に、PHPの基礎の基礎を学びたいということであれば、

PHPのif文をマスターしてプログラミングの表現力を磨こう

で今回使用しているif文を解説していますので、ご参考ください。

正規表現を少しだけ解説

ここを読んでいる方は、「正規表現を少し勉強してみたい」という好奇心をお持ちの方だと思うので、簡単に正規表現について解説します。

今回の正規表現はこちら

/\A\d{3}[-]\d{4}\z/

本当ににただの記号にしか見えないですよね。

正規表現にアレルギーがある方は、もう投げ出したくなるはずです。

もう少しだけ僕と一緒に正規表現をみていきましょう。

5ステップに分けて解説していきます。

1. 正規表現の開始と終わり

//

正規表現は、スラッシュで始まり、スラッシュで終わります。

2. 冒頭を示す「\A」

/\A/

バックスラッシュ大文字Aは文頭を示しています。

「\A」以降の特定の文字列ないしは記号・数字から始まります、という意味です。

3. 半角数字と直前の桁数を示す「\d{3}」

/\A\d{3}/

バックスラッシュ小文字のdは、半角の数字を意味します。

つまり、0~9の数字を示しています。

「正規表現の内部ってどうなってるの?」って思いますよね。

そして、{}量指定子と呼ばれており、直前の文字の桁数を示しています。

今回は、3桁を意味しています。

4. いずれかの文字にマッチする「[]」

/\A\d{3}[-]/

[]は、メタ文字と呼ばれており、カッコ内にある特定の文字を判定します。

今回は、-(小文字のハイフン)を判定しています。

5. 文末を表す「\z」

/\A\d{3}[-]\d{4}\z/

バックスラッシュ小文字のzは文末を表しています。

全てまとめると、、、

3桁の数字の後に、ハイフンが続いて、その後4桁の数字が続く。

これが今回の正規表現の意味になります。

難しいですよね。。。

お付き合いいただいてありがとうございます。

まとめ

  • 正規表現は最初のうちはコピーで大丈夫
  • 「\A」は文頭を表している
  • 「\d」は半角数字を表している
  • 「{}」は直前に桁数を表している
  • 「[]」はカッコ内の特定の文字にマッチする文字を表している
  • 「\z」は文末を表している

正規表現に関しては、サルにもわかる正規表現入門がとてもわかりやすいので、学習したい方はぜひご覧ください。

僕もこのサイトで一通りの正規表現を勉強させていただきました!ありがとうございます!

正規表現はとっても難しいですが、使えるようになるととても強力な武器になるので、一緒に学習をがんばっていきましょう。

今日も学習お疲れ様です。