LoginSignup
19

More than 5 years have passed since last update.

posted at

Ruby / Rails における E164な国際電話番号の扱い方

大げさなタイトルですが、大したことは書いてません。
そして、どれくらい需要があるか謎です(笑)

E164 とは?

ITU-T(国際電気通信連合 電気通信標準化セクター) E.164勧告で規定されている国際公衆電気通信番号。E.164勧告は国際的に一意な電話番号体系として規定されています。この番号は国番号を含む最大15桁の10進数字列です。たとえば03-5297-2311(JPNICの代表電話番号)をE.164番号にすると、日本の国番は81、市外局番03の0をとって3とし「+81-3-5297-2311」となります。

phony

phony は E164な国際電話番号を扱うための gem です。Rails で使うなら phony_rails というラッパーがあります。

03-1234-5678 を normalize すると...

[5] pry(main)> PhonyRails.normalize_number '03-1234-5678', country_code: 'JP'
=> "+81312345678"

090-1234-5678 を normalize すると...

[7] pry(main)> PhonyRails.normalize_number '090-1234-5678', country_code: 'JP'
=> "+819012345678"

となります。桁数に関わらず、正規化してくれるので便利です。

では、日本国内の番号としてありえないものを指定するとどうなるか?

[8] pry(main)> PhonyRails.normalize_number '1234-5678', country_code: 'JP'
=> "+8112345678"

一応出力はされます。E164 として valid かを検証するには Phony の plausible? メソッドを使います。

[9] pry(main)> Phony.plausible? "+8112345678"
=> false

期待通り、false になります。

ここでは簡単な使い方だけご紹介しましたが、他にも多くのメソッドがあるので https://github.com/joost/phony_rails を見てみるとよいかもしれません。

使いどころ

Twilio を利用して SMS を送信する時には、国際電話番号を扱う必要が出てくるので便利な gem だと思います。

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
What you can do with signing up
19