【PHP】電話番号のフォーマットを正しい市外局番・市内局番で区切るスクリプト。

今回は、PHPを使って電話番号のフォーマットを、正しい市外局番-市内局番-電話番号に正規化するスクリプトを作ってみたよ!

ユーザデータテーブルの電話番号欄にハイフンが入っているものとそうでないものが混在してたりすることってよくあるよね?

これをPHPで処理するときに、全ての電話番号データからハイフンを削除するだけならば正規表現で一発だと思うんだけど、ちゃんとした市外局番と市内局番の規則に則ってハイフンを挿入したい!ってことない?
特に、うちのとこみたいに、以前は市外局番「0462」だったのに、市外局番がいくつか統合されて「046」になったので、間違って古い市外局番でハイフン入れちゃう人がいたりして。

そんなこんなで、素敵なスクリプトとかないかなー?と思ってgoogle先生に訊いてみたけど、教えてくれなかったので・・・・・・、早速作ってみたよ。

電話番号の文字列から、preg_replaceで数値以外を削除して、前方一致で市外局番の一覧とマッチさせて、マッチ市外局番に適切な市内局番の桁数のところにハイフンを挿入しちゃうよ。
いまどきスマホからの入力だと、電話番号欄も全角数字とか飛んでくるから、受け取るデータは最初にmbstringで半角にしてますよ。

PHPスクリプトの処理の流れとしては、

1. 「総務省|電気通信番号の利用・指定|市外局番の一覧」を元に市外局番と市内局番桁数の一覧データをPHPで処理しやすいようにCSVファイルで作成しておいたものを読み込んで。
2. 整形したい電話番号文字列データを正規表現とmbstring関数で半角数字のみに変換。
3. 前方一致で市外局番とマッチしたら、該当する市内局番の桁数でハイフン挿入。

って、やってることはめちゃめちゃ簡単だけど、とりあえず何かの役に立つかもしれないのでログっとこう。メモメモ。

実際に他のプログラムで使用するときには、functionにして、引数を処理してreturnすればOKです。
ご参考まで!

PHPの勉強の為に、クラス化して外部ファイルにしたら使いやすくなりますよ。
俺もフォーム関連の入力チェックとか、フォーマット整形のクラスでもまとめてみようかな?
ま、時間があったら公開しますよ!

ちなみに、今回のプログラムは基本的なPHPファンクションしか使っていないです。
PHPの基本さえ覚えれば、これくらいは自分で作れるので、ぜひぜひ勉強してみてくださいね。
ついでに、PHPのお勉強には以下の「パーフェクトPHP」オススメです。

Javascript版のこれもすごくオススメ、簡単なjQueryとか各種APIまで説明してくれてるし、これ一冊でかなりイケるかも。