市外局番の正規表現

はこBOONという宅配便サービスは、ウェブで送り先を登録して番号を発行、その番号をファミポートで打ち込んで発送する、という仕組みです。
が、このウェブサービスのUIが使いにくく困りつつも、今までは我慢してきたんですが、そろそろ我慢も限界なので、自動化することにしました。

イケてないポイントを幾つか指摘すると、このサービス自体、中身はヤマト運輸の宅急便なので、その都合だと思うのですが、電話番号を局番などと分けて入力しなければなりません。
また、郵便番号やなんかをいわゆる「半角」で入力しなければなりません。

ヤフオクなどを使っていると、相手がいわゆる「全角」で書いてくることもあるし、電話番号を続けて書いてくることもあり、一番困るのが、どこまでが市外局番かわからない、という問題でした。

というわけで、そういう単純な作業こそ、計算機が得意とするところですから、代わりにやってもらうようにコーディングしましょう。

まずは、市外局番のデータを取得する必要があります。

http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/shigai_list.html

すぐに見つかりましたが、WordとPDFですか。。。PDFは表の市外局番の列だけコピーできなかったので、Word版から市外局番のデータを抜き出します。

同じ局番がいくつも出てくるので、後処理の簡略化のため、[cci]sort | uniq[/cci] しておきます。

カウントしてみると、現在のところ、約400近い市外局番があるようで、いちいち面倒くさいので、自動で正規表現を作ってもらうことにしましょう。

http://www.hakank.org/makeregex/makeregex.cgi

ここに市外局番の羅列をコピーすると、あら便利、正規表現が出来上がりました。
頭に0が必要なので付け足して完成です。

[cc_JavaScript]tel = ‘0352535111’;
m = tel.match(/0(1(1|2(3|4|5|67?)|3(3|4|5|6|7[247]?|8|9[278]?)|4(2|3|4|5[67]?|66?)|5(2|3|47?|58?|64?|7|8[67]?)?|6(2|3[245]?|48?|5[4568]?|6|7)|7[2345689]?|8[234567]?|9[1234578]?)|2(2[0345689]?|3[34578]?|4[01234678]?|5[0456789]?|6[013456789]?|7[046789]?|8[02345789]?|9[1345679]?)|3|4(2[28]?|3[689]?|4|5|6[03567]?|7[05689]?|80?|9(3|4|5|9[2468])?)?|5(2|3[1236789]?|4[4578]?|5[01345678]?|6[123456789]|7(2|3|4|5|69?|7|8)|8[14567]?|9(4|5|6|79?|8|9)?)|6|7(2[15]?|3[56789]?|4(0|2|3|4|5|68?|7|8|9)|5|6[135678]?|7[01234689]?|8|9[01456789]?)|8(2[034679]?|3(3|4|5|6|7|8[78]?|96)?|4(5|6|77?|8)?|5(1[24]|2|3|4|5|6|7|8|9)|6[356789]?|7[579]?|8[034579]?|9[2345678]?)|9(20?|30?|4(0|2|3|4|6|7|8|96?)|5[0245679]?|6[456789]?|7[234789]?|8(02?|2|3|4|5|6|7)?|9(1[23]|3|4|5|69?|7)?))/);
if (m) {
tel = [m[0],
tel.substr(m[0].length, tel.length – m[0].length – 4),
tel.substr(-4)
];
}
tel;[/cc]

にほんブログ村 ライフスタイルブログ 薪ストーブ暮らしへ
にほんブログ村 ライフスタイルブログ 薪ストーブ暮らしに参加しています。 励みになりますので、足あとがわりに、ランクアップにご協力下さい。

Leave a Reply