読み込み中...

【コピペOK】PHPで郵便番号の正規表現をマスターする4つのサンプルコード

PHPと正規表現を使った郵便番号のチェックとデータクレンジングのサンプルコード PHP
この記事は約9分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPと正規表現を使って郵便番号を扱う方法について学びます。

この記事を読めば、あなたはPHPで郵便番号の正規表現を作成し、それを用いた実装を行うことができるようになります。

また、注意点と対処法、そして応用例までを理解することができます。初心者でも理解できるように詳しく解説していきますので、一緒に学んでいきましょう。

●PHPと正規表現について

○PHPとは

PHPは、Webサイトのバックエンドを担当するサーバーサイドのプログラミング言語の一つです。

HTMLを動的に生成することができ、データベースとの連携も容易なため、Webアプリケーションの開発に広く利用されています。

○正規表現とは

正規表現は、文字列のパターンを表現するための特殊な文字列です。

特定のパターンを持つ文字列を検索したり、置換したりする際に利用されます。

例えば、電話番号や郵便番号のような特定の形式を持つ文字列を検証する際には、正規表現が非常に有用です。

●PHPでの郵便番号の正規表現

○基本的な郵便番号の正規表現

日本の郵便番号は、3桁の数字、ハイフン、4桁の数字の順になっています。

これを正規表現で表すと、次のようになります。

$pattern = "/^\d{3}-\d{4}$/";

この正規表現は、「行の始まりが3桁の数字で、その後にハイフンがあり、最後に4桁の数字が続く行」に一致します。

○全角と半角の問題

しかし、ユーザーが入力する郵便番号は、全角数字やハイフンを含む場合があります。

そのため、全角を半角に変換する処理が必要です。

これは、PHPのmb_convert_kana関数を使って行うことができます。

$zip = mb_convert_kana($zip, 'a', 'UTF-8');

この関数は、全角英数字を半角に変換します。

第一引数には変換したい文字列、第二引数には変換の種類(ここでは’a’を指定して全角英数字を半角に変換します)、第三引数には文字列のエンコーディングを指定します。

●PHPでの郵便番号の正規表現の実装

○HTMLフォームの作成

まず、ユーザーから郵便番号を入力してもらうためのHTMLフォームを作成します。

<form action="check_zip.php" method="post">
    <label for="zip">郵便番号:</label>
    <input type="text" id="zip" name="zip">
    <input type="submit" value="チェック">
</form>

このフォームでは、郵便番号を入力するテキストボックスと、その入力を送信するための送信ボタンがあります。

送信ボタンをクリックすると、フォームのデータは”check_zip.php”というPHPスクリプトに送信されます。

○PHPコードの作成

次に、”check_zip.php”というPHPスクリプトを作成します。

このスクリプトでは、送信された郵便番号が正しい形式になっているかをチェックします。

<?php
$zip = $_POST['zip'];
$zip = mb_convert_kana($zip, 'a', 'UTF-8');
$pattern = "/^\d{3}-\d{4}$/";

if (preg_match($pattern, $zip)) {
    echo "正しい郵便番号です。";
} else {
    echo "不正な郵便番号です。";
}
?>

このスクリプトでは、まず$_POST['zip']を使ってフォームから送信された郵便番号を取得します。

次に、mb_convert_kana関数を使って全角数字を半角に変換します。

そして、正規表現を使って郵便番号が正しい形式になっているかをチェックします。

もし郵便番号が正しい形式になっていれば、「正しい郵便番号です。」と表示し、そうでなければ「不正な郵便番号です。」と表示します。

○サンプルコード1:基本的な郵便番号の正規表現

下記のサンプルコードでは、基本的な郵便番号の正規表現を使って、郵便番号が正しい形式になっているかをチェックしています。

$zip = "123-4567";
$pattern = "/^\d{3}-\d{4}$/";

if (preg_match($pattern, $zip)) {
    echo "正しい郵便番号です。";
} else {
    echo "不正な郵便番号です。";
}

このコードでは、まず郵便番号を表す文字列$zipを定義しています。

そして、正規表現を使って郵便番号が正しい形式になっているかをチェックします。

preg_match関数を使って正規表現と郵便番号を比較し、一致する場合は「正しい郵便番号です。」と表示します。

一致しない場合は「不正な郵便番号です。」と表示します。

○サンプルコード2:全角と半角の問題を解決する正規表現

全角数字やハイフンを含む郵便番号を扱うためのサンプルコードを紹介します。

$zip = "123−4567";
$zip = mb_convert_kana($zip, 'a', 'UTF-8');
$pattern = "/^\d{3}-\d{4}$/";

if (preg_match($pattern, $zip)) {
    echo "正しい郵便番号です。";
} else {
    echo "不正な郵便番号です。";
}

このコードでは、全角の郵便番号を半角に変換した後で正規表現を使って形式をチェックしています。

全角の郵便番号も正しく扱うことができます。

●注意点と対処法

正規表現を使う際には、いくつかの注意点があります。

まず、正規表現は非常に強力なツールですが、複雑なパターンを扱うときには注意が必要です。

正規表現が複雑になると、その意味を理解するのが難しくなり、バグの原因となる可能性があります。

また、ユーザーからの入力をそのまま正規表現に使うことは避けてください。

ユーザーからの入力は必ず適切にエスケープまたはサニタイズするようにしましょう。

これは、セキュリティ上の問題を防ぐためです。

さらに、正規表現を使っても解決できない問題がある場合もあります。

例えば、郵便番号が実際に存在するかどうかを確認するには、郵便番号のデータベースが必要になります。

正規表現だけでは、形式だけをチェックすることしかできません。

●応用例とサンプルコード

正規表現は、郵便番号のチェックだけでなく、さまざまな場面で利用することができます。

郵便番号の正規表現を応用したフォームバリデーションとデータクレンジングのサンプルコードを紹介します。

○サンプルコード3:郵便番号の正規表現を応用したフォームバリデーション

フォームバリデーションでは、ユーザーが入力した郵便番号が正しい形式になっているかをチェックします。

下記のサンプルコードは、PHPでフォームバリデーションを行う一例です。

function validatePostalCode($input) {
    $input = mb_convert_kana($input, 'a', 'UTF-8');
    $pattern = "/^\d{3}-\d{4}$/";
    if (preg_match($pattern, $input)) {
        return true;
    } else {
        return false;
    }
}

$postalCode = $_POST['postalCode'];
if (validatePostalCode($postalCode)) {
    echo "郵便番号は正しい形式です。";
} else {
    echo "郵便番号は正しい形式ではありません。";
}

このコードでは、validatePostalCodeという関数を定義しています。

この関数は、引数として郵便番号を受け取り、その郵便番号が正しい形式になっているかをチェックします。

郵便番号が正しい形式になっていれば、関数はtrueを返し、そうでなければfalseを返します。

○サンプルコード4:郵便番号の正規表現を応用したデータクレンジング

データクレンジングでは、データベース内の郵便番号データが正しい形式になっているかを確認し、必要に応じて修正します。

下記のサンプルコードは、PHPでデータクレンジングを行う一例です。

function cleansePostalCode($input) {
    $input = mb_convert_kana($input, 'a', 'UTF-8');
    $pattern = "/^\d{3}-\d{4}$/";
    if (preg_match($pattern, $input)) {
        return $input;
    } else {
        return "不正な郵便番号";
    }
}

$postalCodes = ["123-4567", "1234567", "123−4567", "123-45678"];
foreach ($postalCodes as $postalCode) {
    echo cleansePostalCode($postalCode) . "\n";
}

このコードでは、cleansePostalCodeという関数を定義しています。

この関数は、引数として郵便番号を受け取り、その郵便番号が正しい形式になっているかをチェックします。

郵便番号が正しい形式になっていれば、そのままの郵便番号を返し、そうでなければ「不正な郵便番号」という文字列を返します。

これにより、データベース内の郵便番号データが正しい形式になっているかを確認し、必要に応じて修正することができます。

まとめ

本記事では、PHPと正規表現を用いて郵便番号のチェックとデータクレンジングを行う方法について詳しく説明しました。

正規表現は非常に強力なツールであり、適切に使用することで、データのバリデーションやクレンジングを効率的に行うことができます。

しかし、正規表現は複雑であり、間違った使用方法は予期しない結果をもたらす可能性があります。

そのため、正規表現を使用する際には、その動作を正確に理解し、適切にテストすることが重要です。

以上が、PHPと正規表現を用いて郵便番号のチェックとデータクレンジングを行う方法についての説明です。

この情報が、あなたのプログラミングスキルの向上に役立つことを願っています。