今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

電話番号の正規表現

電話番号の正規表現って、ぐぐったらいくつもあるけどいまいちピンとこない。

そのなか、にぽたんは別格。
でも、こんな長いのソースコードに埋め込みたくない。。。

二度目の公開!電話番号の正規表現 - にぽたん研究所

電話番号の規則は総務省のサイトに。

総務省|電気通信番号の利用・指定|電話番号に関するQ&A

要約すると以下のルール。

  • 0から始まる
  • 携帯とIP電話は 0x0-xxxx-xxxx
  • 東京と大阪は 0[36]-xxxx-xxxx
  • 固定電話は 0xx-xxx-xxxx|0xxx-xx-xxxx|0xxxx-x-xxxx
  • 固定電話の市内局番は[2-9]で始まる
  • フリーダイヤルは 0120-xxx-xxx|0120-xx-xxxx|0120-xxxxxx
  • 0570とか国際電話が欲しい人は自分で追加してね
  • (おまけ)ハイフン(-)はあってもなくてもいい

上記ルールをふまえて可読性重視で書くと、正規表現はこんな感じに。

  String regex = "^0(("
    			+ "90|80|70|50)-?\\d{4}-?\\d{4}|" // 携帯・IP電話
    			+ "[36]-?[2-9]\\d{3}-?\\d{4}|" // 東京・大阪
    			+ "[1-9]{2}(-?[2-9]\\d{2}|\\d-?[2-9]\\d|\\d{2}-?[2-9])-?\\d{4}|" // 固定電話
    			+ "120-(\\d{3}-\\d{3}|\\d{2}-\\d{4}|\\d{6})" // 0120
    			+ ")$";