電話番号の正規表現
電話番号の正規表現って、ぐぐったらいくつもあるけどいまいちピンとこない。
そのなか、にぽたんは別格。
でも、こんな長いのソースコードに埋め込みたくない。。。
電話番号の規則は総務省のサイトに。
≫ 総務省|電気通信番号の利用・指定|電話番号に関する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 + ")$";