TelephoneNumber est un joyau mondial de validation de numéro de téléphone basé sur la bibliothèque libphonenumber de Google.
N'hésitez pas à consulter notre démo !
Numérojack
Ajoutez cette ligne au Gemfile de votre application :
gem 'telephone_number'
Et puis exécutez :
$ bundle
Ou installez-le vous-même en tant que :
$ gem install telephone_number
Cette bibliothèque nécessite Ruby 2.4 ou version ultérieure.
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
doit donner un code de pays valide à deux lettres tel que :us
, :ca
ou 'DE'
String
ou Symbol
au lieu d'un Proc
. Vous pouvez obtenir un objet TelephoneNumber
en appelant :
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
Après cela, vous disposez des méthodes d’instance suivantes.
valid_types
Renvoie tous les types pour lesquels le numéro est considéré comme valide.
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
Renvoie une valeur booléenne indiquant si valid_types
est vide ou non.
phone_object.valid? ==> true
national_number(formatted: true)
Renvoie le numéro national formaté, y compris les caractères spéciaux tels que les parenthèses et les tirets. Vous pouvez omettre les caractères spéciaux en passant formatted: false
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
Renvoie le numéro international formaté, y compris les caractères spéciaux tels que les parenthèses et les tirets. Vous pouvez omettre les caractères spéciaux en passant formatted: false
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
Renvoie le numéro international formaté, y compris les caractères spéciaux tels que les parenthèses et les tirets. Vous pouvez omettre les caractères spéciaux en passant formatted: false
phone_object.e164_number ==> "+13175082237"
country
Renvoie un objet contenant des données relatives au pays du numéro.
phone_object.country ===>
#
location
Renvoie l'emplacement du numéro. La langue par défaut est :en
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
Renvoie le fuseau horaire du numéro.
phone_object.timezone ==> "America/New_York"
Vous disposez également des méthodes de classe suivantes.
parse
Renvoie un objet TelephoneNumber.
TelephoneNumber.parse("3175082237", :US)
Si vous transmettez un numéro au format E164, nous déterminerons le pays à la volée.
TelephoneNumber.parse("+13175082237")
valid?
Renvoie une valeur booléenne indiquant si un nombre particulier est valide ou non.
TelephoneNumber.valid?("3175082237", :US) ==> true
Si vous souhaitez valider un ensemble spécifique de clés, vous pouvez transmettre un tableau de clés
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
Renvoie une valeur booléenne indiquant si un nombre particulier n'est pas valide ou non.
TelephoneNumber.invalid?("3175082237", :US) ==> false
Si vous souhaitez invalider un ensemble spécifique de clés, vous pouvez transmettre un tableau de clés
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
Dans le cas où vous devez remplacer les données fournies par Google, vous pouvez le faire en définissant un fichier de remplacement. Ce fichier devrait être au même format que celui de Google et sérialisé à l'aide de Marshal.
Pour générer un fichier de remplacement sérialisé :
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
Dans ce cas, /path/to/file
représente un fichier XML contenant vos données personnalisées dans la même structure que celle des données de Google.
Vous pouvez définir le fichier de remplacement avec :
TelephoneNumber.override_file = "/path/to_file.dat"
Si TelephoneNumber reçoit un numéro invalide et est ensuite invité à formater ce numéro, il renverra simplement une chaîne non formatée du numéro initialement transmis. En effet, les règles de formatage ne seront pas trouvées pour les nombres invalides. Si cela est inacceptable, vous pouvez définir un default_format_pattern
et default_format_string
que TelephoneNumber utilisera pour tenter de formater des numéros non valides.
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"
Après avoir extrait le dépôt, exécutez bin/setup
pour installer les dépendances. Ensuite, exécutez rake test
pour exécuter les tests. Vous pouvez également exécuter bin/console
pour une invite interactive qui vous permettra d'expérimenter.
Lors du développement de nouvelles fonctionnalités, vous souhaiterez peut-être tester des numéros de téléphone spécifiques. Pour ce faire, ajoutez le numéro à lib/telephone_number/test_data_generator.rb
puis exécutez rake data:test:import
. Cette commande accédera à l'application de démonstration fournie par Google et extraira les formats corrects à tester.
Pour installer cette gemme sur votre machine locale, exécutez bundle exec rake install
.
Les rapports de bogues et les demandes d'extraction sont les bienvenus sur GitHub à l'adresse https://github.com/mobi/telephone_number. Ce projet est destiné à être un espace de collaboration sûr et accueillant, et les contributeurs doivent adhérer au code de conduite Contributor Covenant.
La gemme est disponible en open source selon les termes de la licence MIT.