概要
こちらの gist に触発され、日本の電話番号をよしなに操作する package を Go で作成しました。
使い方
- インストール
$ go get https://github.com/zenwerk/jptel
Normalize関数
入力された電話番号を 市外局番-市内局番-加入者番号
の形式で返します。
全角・半角混じりでも問題ありません。
number, _ := jptel.Normalize("0123456789")
fmt.Println(number) // 0123-45-6789
number, _ = jptel.Normalize("0123456789")
fmt.Println(number) // 0123-45-6789
number, _ = jptel.Normalize("090-123456ー78")
fmt.Println(number) // 090-1234-5678
Split関数
入力された電話番号を市外局番・市外局番・加入者番号に分割した構造体を返します。
全角・半角混じりでも問題ありません。
result, _ := jptel.Split("0312345678")
fmt.Println(result.AreaCode) // 03
fmt.Println(result.CityCode) // 1234
fmt.Println(result.SubscriberCode) // 5678
result, _ = jptel.Split("09098765432")
fmt.Println(result.AreaCode) // 090
fmt.Println(result.CityCode) // 9876
fmt.Println(result.SubscriberCode) // 5432
result, err = jptel.Split("0ー123456-789")
fmt.Println(result.AreaCode) // 0123
fmt.Println(result.CityCode) // 45
fmt.Println(result.SubscriberCode) // 6789
fmt.Println(result.Format()) // 0123-45-6789
Validate関数
入力された電話番号が正しいかどうか判別し error か nil を返します。
全角・半角混じりでも問題ありません。
err = jptel.Validate("090-1234-5678") // nil
if err != nil {
fmt.Println(err) // nil
}
err = jptel.Validate("03-1234-5678") // nil
if err != nil {
fmt.Println(err) // nil
}
err = jptel.Validate("0-90-12345678") // error
if err != nil {
fmt.Println(err) // telephone number is invalid
}
err = jptel.Validate("000-1234-9876") // error
if err != nil {
fmt.Println(err) // telephone number does not match any area code
}
電話番号のマスターデータ
市外局番のデータは総務省のサイトからダウンロードできるExcelから、pythonのスクリプトで自動生成しています。
網羅しているつもりですが、抜けや例外的な事例があれば github の issue などで指摘いただければ対応したいと思います。
その他
Python版も作りました
まとめ
ウェブアプリケーションなどで電話番号を入力するケースはままあると思いますので、そういった場面で便利に使ってもらえれば幸いです。