TelephoneNumber es una joya de validación de números de teléfono global basada en la biblioteca libphonenumber de Google.
¡No dudes en ver nuestra demostración!
Adivinación
Agregue esta línea al Gemfile de su aplicación:
gem 'telephone_number'
Y luego ejecuta:
$ bundle
O instálelo usted mismo como:
$ gem install telephone_number
Esta biblioteca requiere Ruby 2.4 o 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
debe generar un código de país válido de dos letras, como :us
, :ca
o 'DE'
String
o Symbol
en lugar de un Proc
. Puede obtener un objeto TelephoneNumber
llamando a:
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
Después de eso, tendrá a su disposición los siguientes métodos de instancia.
valid_types
Devuelve todos los tipos para los que el número se considera válido.
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
Devuelve un valor booleano que indica si valid_types
está vacío o no.
phone_object.valid? ==> true
national_number(formatted: true)
Devuelve el número nacional formateado, incluidos caracteres especiales como paréntesis y guiones. Puede omitir los caracteres especiales pasando formatted: false
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
Devuelve el número con formato internacional que incluye caracteres especiales como paréntesis y guiones. Puede omitir los caracteres especiales pasando formatted: false
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
Devuelve el número con formato internacional que incluye caracteres especiales como paréntesis y guiones. Puede omitir los caracteres especiales pasando formatted: false
phone_object.e164_number ==> "+13175082237"
country
Devuelve un objeto que contiene datos relacionados con el país del número.
phone_object.country ===>
#
location
Devuelve la ubicación del número. La configuración regional predeterminada es :en
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
Devuelve la zona horaria del número.
phone_object.timezone ==> "America/New_York"
También tiene los siguientes métodos de clase disponibles.
parse
Devuelve un objeto NúmeroDeTeléfono.
TelephoneNumber.parse("3175082237", :US)
Si pasa un número con formato E164, determinaremos el país sobre la marcha.
TelephoneNumber.parse("+13175082237")
valid?
Devuelve un valor booleano que indica si un número en particular es válido o no.
TelephoneNumber.valid?("3175082237", :US) ==> true
Si desea validar con un conjunto específico de claves, puede pasar una serie de claves.
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
Devuelve un valor booleano que indica si un número determinado no es válido o no.
TelephoneNumber.invalid?("3175082237", :US) ==> false
Si desea invalidar un conjunto específico de claves, puede pasar una serie de claves.
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
En caso de que necesite anular los datos que proporciona Google, puede hacerlo configurando un archivo de anulación. Se espera que este archivo tenga el mismo formato que el de Google y que esté serializado mediante Marshal.
Para generar un archivo de anulación serializado:
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
En este caso, /path/to/file
representa un archivo xml que tiene sus datos personalizados en la misma estructura que los datos de Google.
Puede configurar el archivo de anulación con:
TelephoneNumber.override_file = "/path/to_file.dat"
Si a NúmeroTeléfono se le pasa un número no válido y luego se le pide que formatee ese número, simplemente devolverá una cadena sin formato del número pasado originalmente. Esto se debe a que no se encontrarán reglas de formato para números no válidos. Si esto es inaceptable, puede establecer un default_format_pattern
y default_format_string
que TelephoneNumber utilizará para intentar formatear números no vá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"
Después de revisar el repositorio, ejecute bin/setup
para instalar las dependencias. Luego, ejecute rake test
para ejecutar las pruebas. También puede ejecutar bin/console
para obtener un mensaje interactivo que le permitirá experimentar.
Mientras desarrolla nuevas funciones, es posible que desee realizar pruebas con números de teléfono específicos. Para hacer esto, agregue el número a lib/telephone_number/test_data_generator.rb
y luego ejecute rake data:test:import
. Este comando se comunicará con la aplicación de demostración proporcionada por Google y obtendrá los formatos correctos para realizar la prueba.
Para instalar esta joya en su máquina local, ejecute bundle exec rake install
.
Los informes de errores y las solicitudes de extracción son bienvenidos en GitHub en https://github.com/mobi/telephone_number. Este proyecto pretende ser un espacio seguro y acogedor para la colaboración, y se espera que los contribuyentes cumplan con el código de conducta del Pacto de Colaboradores.
La gema está disponible como código abierto según los términos de la licencia MIT.