Phone number validation for Ruby
TelephoneNumber is global phone number validation gem based on Google's libphonenumber library.
Feel free to check out our demo!
Add this line to your application's Gemfile:
gem 'telephone_number'
And then execute:
$ bundle
Or install it yourself as:
$ gem install telephone_number
This library requires Ruby 2.4 or later.
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:voiprecord.country must yield a valid two letter country code such as :us, :ca or 'DE'String or Symbol instead of a Proc.You can obtain a TelephoneNumber object by calling:
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
After that you have the following instance methods available to you.
valid_typesReturns all types that the number is considered valid for.
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?Returns boolean value indicating whether or not valid_types is empty.
phone_object.valid? ==> true
national_number(formatted: true)Returns the national formatted number including special characters such as parenthesis and dashes. You can omit the special characters by passing formatted: false
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)Returns the international formatted number including special characters such as parenthesis and dashes. You can omit the special characters by passing formatted: false
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)Returns the international formatted number including special characters such as parenthesis and dashes. You can omit the special characters by passing formatted: false
phone_object.e164_number ==> "+13175082237"
countryReturns an object containing data related a the number's country.
…
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
```
invalid?Returns boolean value indicating whether or not a particular number is invalid.
TelephoneNumber.invalid?("3175082237", :US) ==> false
If you are looking to invalidate against a specific set of keys, you can pass in an array of keys
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
…
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"
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
While developing new functionality, you may want to test against specific phone numbers. In order to do this, add the number to `lib/telephone_number/test_data_generator.rb` and then run `rake data:test:import`. This command will reach out to the demo application provided by Google and pull the correct formats to test against.
To install this gem onto your local machine, run `bundle exec rake install`.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/mobi/telephone_number. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
No open issues yet, or sync has not completed.