TelephoneNumber — это глобальный драгоценный камень проверки номера телефона, основанный на библиотеке Google libphonenumber.
Не стесняйтесь проверить нашу демо-версию!
Номерджек
Добавьте эту строку в 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'
String
или Symbol
вместо Proc
. Вы можете получить объект 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
представляет собой XML-файл, в котором ваши пользовательские данные имеют ту же структуру, что и данные Google.
Вы можете установить файл переопределения с помощью:
TelephoneNumber.override_file = "/path/to_file.dat"
Если TelephoneNumber передается недопустимый номер, а затем его просят отформатировать этот номер, он просто вернет неформатированную строку первоначально переданного номера. Это связано с тем, что для недопустимых чисел не будут найдены правила форматирования. Если это неприемлемо, вы можете установить default_format_pattern
и default_format_string
, которые TelephoneNumber будет использовать для форматирования недопустимых номеров.
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, и извлечет правильные форматы для тестирования.
Чтобы установить этот драгоценный камень на свой локальный компьютер, запустите bundle exec rake install
.
Отчеты об ошибках и запросы на включение приветствуются на GitHub по адресу https://github.com/mobi/telephone_number. Этот проект призван стать безопасным и гостеприимным пространством для сотрудничества, и ожидается, что участники будут соблюдать Кодекс поведения участников.
Гем доступен с открытым исходным кодом в соответствии с условиями лицензии MIT.