大げさなタイトルですが、大したことは書いてません。
そして、どれくらい需要があるか謎です(笑)
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 だと思います。