TelephoneNumber は、Google の libphonenumber ライブラリに基づいたグローバルな電話番号検証 gem です。
お気軽にデモをチェックしてください。
ナンバージャック
次の行をアプリケーションの Gemfile に追加します。
gem 'telephone_number'
そして、以下を実行します。
$ bundle
または、次のように自分でインストールします。
$ gem install telephone_number
このライブラリには Ruby 2.4 以降が必要です。
validates :my_attribute_name, telephone_number: {country: proc{|record| record.country}, types: [:fixed_line, :mobile, etc]}
:area_code_optional
:fixed_line
:mobile
:no_international_dialling
:pager
:personal_number
:premium_rate
:shared_cost
:toll_free
:uan
:voicemail
:voip
record.country
:us
、 :ca
、 'DE'
などの有効な 2 文字の国コードを生成する必要があります。Proc
の代わりにString
またはSymbol
渡すこともできます。 以下を呼び出すことで、 TelephoneNumber
オブジェクトを取得できます。
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
その後、次のインスタンス メソッドが使用できるようになります。
valid_types
数値が有効であるとみなされるすべてのタイプを返します。
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
valid_types
が空かどうかを示すブール値を返します。
phone_object.valid? ==> true
national_number(formatted: true)
括弧やダッシュなどの特殊文字を含む各国形式の数値を返します。 formatted: false
を渡すことで特殊文字を省略できます。
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
括弧やダッシュなどの特殊文字を含む国際形式の数値を返します。 formatted: false
を渡すことで特殊文字を省略できます。
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
括弧やダッシュなどの特殊文字を含む国際形式の数値を返します。 formatted: false
を渡すことで特殊文字を省略できます。
phone_object.e164_number ==> "+13175082237"
country
番号の国に関連するデータを含むオブジェクトを返します。
phone_object.country ===>
#
location
数値の位置を返します。デフォルトのロケールは:en
です
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
数値のタイムゾーンを返します。
phone_object.timezone ==> "America/New_York"
次のクラス メソッドも使用できます。
parse
TelephoneNumber オブジェクトを返します。
TelephoneNumber.parse("3175082237", :US)
E164 形式の番号を渡すと、その場で国が決定されます。
TelephoneNumber.parse("+13175082237")
valid?
特定の数値が有効かどうかを示すブール値を返します。
TelephoneNumber.valid?("3175082237", :US) ==> true
特定のキーのセットに対して検証したい場合は、キーの配列を渡すことができます。
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
特定の数値が無効かどうかを示すブール値を返します。
TelephoneNumber.invalid?("3175082237", :US) ==> false
特定のキーのセットに対して無効化したい場合は、キーの配列を渡すことができます。
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
Google が提供するデータをオーバーライドする必要がある場合は、オーバーライド ファイルを設定することで実行できます。このファイルは、Google と同じ形式であり、Marshal を使用してシリアル化されることが期待されます。
シリアル化されたオーバーライド ファイルを生成するには、次の手順を実行します。
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
この例では、 /path/to/file
Google のデータと同じ構造にカスタム データが含まれる XML ファイルを表します。
次のようにオーバーライド ファイルを設定できます。
TelephoneNumber.override_file = "/path/to_file.dat"
TelephoneNumber に無効な番号が渡され、その番号のフォーマットを要求された場合、最初に渡された番号のフォーマットされていない文字列が返されます。これは、無効な数値に対して書式設定ルールが見つからないためです。これが受け入れられない場合は、TelephoneNumber が無効な番号のフォーマットに使用するdefault_format_pattern
とdefault_format_string
を設定できます。
TelephoneNumber.default_format_pattern = "(\d{3})(\d{3})(\d*)"
TelephoneNumber.default_format_string = "($1) $2-$3"
invalid_number = "1111111111"
phone_object = TelephoneNumber.parse(invalid_number, :US)
phone_object.national_number ==> "(111) 111-1111"
リポジトリをチェックアウトした後、 bin/setup
実行して依存関係をインストールします。次に、 rake test
実行してテストを実行します。 bin/console
実行して対話型プロンプトを表示し、実験することもできます。
新しい機能を開発しているときに、特定の電話番号に対してテストすることが必要な場合があります。これを行うには、番号をlib/telephone_number/test_data_generator.rb
に追加し、 rake data:test:import
を実行します。このコマンドは、Google が提供するデモ アプリケーションにアクセスし、テスト用の正しい形式を取得します。
この gem をローカル マシンにインストールするには、 bundle exec rake install
実行します。
バグレポートとプルリクエストは、GitHub (https://github.com/mobi/telephone_number) で受け付けています。このプロジェクトは、安全で居心地の良いコラボレーションの場となることを目的としており、貢献者は貢献者規約の行動規範を遵守することが期待されています。
この gem は、MIT ライセンスの条件に基づいてオープン ソースとして利用できます。