2
1

More than 3 years have passed since last update.

[PHP]郵便番号を正規表現でチェックする

Last updated at Posted at 2020-09-09

今回は下記のコードを使って見ていきます。

$zip = '123−4567';  //←全角

$zip = mb_convert_kana($zip, 'a', 'UTF-8');
if (preg_match("/\A\d{3}[-]\d{4}\z/", $zip)) {
  print('郵便番号:〒' . $zip);
} else {
  print('※郵便番号を 123-4567の形式でご記入ください');
}

↓のように表示されます。

郵便番号:〒123-4567  //←半角になっている

mb_convert_kanaについては → こちら

パラメーターで「'a'」を指定する理由

郵便番号は数字なので「'n'」では?と思うかもしれませんが、
-(ハイフン)が含まれているので英数字扱いとなります。
'a'」と指定することで、英数字を半角に直すことができます。

本題の正規表現ですが、まずpreg_matchというファンクションを使います。
続く/\A\d{3}[-]\d{4}\z/について見ていきます。


\d{3}

dというのは数字「DECIMAL(デシマル)」のこと
{3}は3つ
つまり、「数字を3つ並べること」という指定

[-]

前後を-(ハイフン)で結んでくださいという指定

\d{4}

「数字を4つ並べること」

ここまでで、\d{3}[-]\d{4}で郵便番号の書式をチェックしています。

それでは、前後の「\A」「\z」は何か?

\A

「文章の先頭であること」を指定

\z

「文章の最後であること」を指定

まとめると、/\A\d{3}[-]\d{4}\z/というのは
「数字3つ並んでいるのが先頭で、間に-(ハイフン)を挟んで、終わりは数字4つ並んでいます」
というルールの記述になります。

-(ハイフン)有無のチェックもされているので、
$zip = '1234567';だと

※郵便番号を 123-4567の形式でご記入ください

と返されます。


以上です。お疲れ様でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1