今回は下記のコードを使って見ていきます。
$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の形式でご記入ください
と返されます。
以上です。お疲れ様でした。