LoginSignup
9
7

More than 3 years have passed since last update.

日本の電話番号を操作する Go package「jptel」を作成しました

Last updated at Posted at 2017-05-11

概要

こちらの 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版も作りました

まとめ

ウェブアプリケーションなどで電話番号を入力するケースはままあると思いますので、そういった場面で便利に使ってもらえれば幸いです。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7