TelephoneNumber é uma gema global de validação de número de telefone baseada na biblioteca libphonenumber do Google.
Sinta-se à vontade para conferir nossa demonstração!
Número Jack
Adicione esta linha ao Gemfile da sua aplicação:
gem 'telephone_number'
E então execute:
$ bundle
Ou instale você mesmo como:
$ gem install telephone_number
Esta biblioteca requer Ruby 2.4 ou posterior.
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
deve gerar um código de país válido de duas letras, como :us
, :ca
ou 'DE'
String
ou Symbol
em vez de um Proc
. Você pode obter um objeto TelephoneNumber
chamando:
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
Depois disso, você terá os seguintes métodos de instância disponíveis.
valid_types
Retorna todos os tipos para os quais o número é considerado válido.
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
Retorna um valor booleano indicando se valid_types
está vazio ou não.
phone_object.valid? ==> true
national_number(formatted: true)
Retorna o número nacional formatado, incluindo caracteres especiais, como parênteses e travessões. Você pode omitir os caracteres especiais passando formatted: false
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
Retorna o número formatado internacionalmente, incluindo caracteres especiais, como parênteses e travessões. Você pode omitir os caracteres especiais passando formatted: false
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
Retorna o número formatado internacionalmente, incluindo caracteres especiais, como parênteses e travessões. Você pode omitir os caracteres especiais passando formatted: false
phone_object.e164_number ==> "+13175082237"
country
Retorna um objeto contendo dados relacionados ao país do número.
phone_object.country ===>
#
location
Retorna a localização do número. A localidade padrão é :en
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
Retorna o fuso horário do número.
phone_object.timezone ==> "America/New_York"
Você também tem os seguintes métodos de classe disponíveis.
parse
Retorna um objeto PhoneNumber.
TelephoneNumber.parse("3175082237", :US)
Se você passar um número formatado E164, determinaremos o país imediatamente.
TelephoneNumber.parse("+13175082237")
valid?
Retorna um valor booleano que indica se um determinado número é válido ou não.
TelephoneNumber.valid?("3175082237", :US) ==> true
Se você deseja validar um conjunto específico de chaves, você pode passar uma matriz de chaves
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
Retorna um valor booleano que indica se um determinado número é inválido ou não.
TelephoneNumber.invalid?("3175082237", :US) ==> false
Se você deseja invalidar um conjunto específico de chaves, você pode passar uma matriz de chaves
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
Caso precise substituir os dados que o Google está fornecendo, você pode fazer isso definindo um arquivo de substituição. Espera-se que este arquivo esteja no mesmo formato do Google e também serializado usando Marshal.
Para gerar um arquivo de substituição serializado:
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
Neste caso, /path/to/file
representa um arquivo xml que contém seus dados personalizados na mesma estrutura em que os dados do Google estão.
Você pode definir o arquivo de substituição com:
TelephoneNumber.override_file = "/path/to_file.dat"
Se TelephoneNumber receber um número inválido e for solicitado a formatar esse número, ele simplesmente retornará uma string não formatada do número originalmente passado. Isso ocorre porque as regras de formatação não serão encontradas para números inválidos. Se isso for inaceitável, você pode definir um default_format_pattern
e default_format_string
que TelephoneNumber usará na tentativa de formatar números inválidos.
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"
Depois de verificar o repositório, execute bin/setup
para instalar as dependências. Em seguida, execute rake test
para executar os testes. Você também pode executar bin/console
para obter um prompt interativo que permitirá experimentar.
Ao desenvolver novas funcionalidades, você pode testar números de telefone específicos. Para fazer isso, adicione o número a lib/telephone_number/test_data_generator.rb
e execute rake data:test:import
. Este comando acessará o aplicativo de demonstração fornecido pelo Google e obterá os formatos corretos para teste.
Para instalar esta jóia em sua máquina local, execute bundle exec rake install
.
Relatórios de bugs e solicitações pull são bem-vindos no GitHub em https://github.com/mobi/telephone_number. Este projeto pretende ser um espaço seguro e acolhedor para colaboração, e espera-se que os contribuidores sigam o código de conduta do Contributor Covenant.
A gema está disponível como código aberto sob os termos da licença MIT.