郵便番号バリデーション
preg_matchを使った各国の郵便番号のバリデーション
Countries and Postal codes formats、 Postal Codes Formatsなどを参考。
PHP
// オーストラリア、ノルウェー
// 4桁の数字(1234)
if (! preg_match('/^[0-9]{4}\z/', $str)) {
// エラー
}
// オーストリア、ベルギー、スイス
// 4桁の数字(1234)、ただし0始まりはなし
if (! preg_match('/^[1-9][0-9]{3}\z/', $str)) {
// エラー
}
// ブラジル
// 前5桁後3桁ハイフン区切りの数字(12345-678)
if (! preg_match('/^[0-9]{5}-[0-9]{3}\z/', $str)) {
// エラー
}
// カナダ
// 前3桁英数字、後3桁英数字スペース区切り(A1A 2A3)
if (! preg_match('/^[ABCEGHJ-NPRSTVXY][0-9][ABCEGHJ-NPRSTV-Z]\s[0-9][ABCEGHJ-NPRSTV-Z][0-9]\z/', $str)) {
// エラー
}
// 中国
// 6桁の数字(123456)
if (! preg_match('/^[0-9]{6}\z/', $str)) {
// エラー
}
// フランス、ドイツ、イタリア
// 5桁の数字(12345)
if (! preg_match('/^[0-9]{5}\z/', $str)) {
// エラー
}
// ポーランド
// 前2桁後3桁ハイフン区切りの数字(12-345)
if (! preg_match('/^[0-9]{2}-[0-9]{3}\z/', $str)) {
// エラー
}
// ポルトガル
// 前4桁後3桁ハイフン区切りの数字(1234-567)、ただし0始まりはなし
if (! preg_match('/^[1-9][0-9]{3}-[0-9]{3}\z/', $str)) {
// エラー
}
// ロシア
// 6桁の数字(123456)、ただし0、7、8、9始まりはなし
if (! preg_match('/^[1-6][0-9]{5}\z/', $str)) {
// エラー
}
// 韓国
// 前3桁後3桁ハイフン区切りの数字(123-456)、ただし0、8、9始まりはなし
if (! preg_match('/^[1-7][0-9]{2}-[0-9]{3}\z/', $str)) {
// エラー
}
// イギリス
// 前2~4桁英数字、後3桁英数字スペース区切り(前はAA1A、A1A、A1、A12、AA1、AA12、後は1AA)
if (! preg_match('/^[A-Z]{1,2}[0-9][A-Z0-9]?\s[0-9][ABD-HJLNP-UW-Z]{2}\z/', $str)) {
// エラー
}
// アメリカ
// 5桁の数字(12345)または前5桁後4桁ハイフン区切りの数字(12345-6789)
if (! preg_match('/^[0-9]{5}(-[0-9]{4})?\z/', $str)) {
// エラー
}
日本は正規表現 実用編の番号の通り。
PHP
// 世界の郵便番号(汎用)
// 英数字、区切りがある場合はスペースかハイフン
if (! preg_match('/^[A-Z0-9]{2,8}((-|\s)[A-Z0-9]{1,4}){0,2}\z/', $str)) {
// エラー
}