Je suggère également de consulter la bibliothèque Google " libphonenumber ". Je sais que ce n'est pas regex mais ça fait exactement ce que vous voulez.
Par exemple, il reconnaîtra que:
15555555555
est un nombre possible mais pas un nombre valide. Il prend également en charge les pays en dehors des États-Unis.
Points forts de la fonctionnalité:
- Analyse / formatage / validation des numéros de téléphone pour tous les pays / régions du monde.
getNumberType
- obtient le type du numéro en fonction du numéro lui-même; capable de distinguer les numéros fixes, mobiles, sans frais, surtaxés, à frais partagés, VoIP et personnels (lorsque cela est possible).
isNumberMatch
- obtient un niveau de confiance pour savoir si deux nombres peuvent être identiques.
getExampleNumber
/ getExampleNumberByType
- fournit des exemples de numéros valides pour tous les pays / régions, avec la possibilité de spécifier le type d'exemple de numéro de téléphone requis.
isPossibleNumber
- deviner rapidement si un numéro est un numéro de téléphone possible en utilisant uniquement les informations de longueur, beaucoup plus rapidement qu'une validation complète.
isValidNumber
- validation complète d'un numéro de téléphone pour une région à l'aide des informations de longueur et de préfixe.
AsYouTypeFormatter
- formate les numéros de téléphone à la volée lorsque les utilisateurs entrent chaque chiffre.
findNumbers
- trouve des nombres dans la saisie de texte.
PhoneNumberOfflineGeocoder
- fournit des informations géographiques liées à un numéro de téléphone.
Exemples
Le plus gros problème avec la validation du numéro de téléphone est qu'il est très dépendant de la culture.
- Amérique
(408) 974–2042
est un numéro américain valide
(999) 974–2042
n'est pas un numéro américain valide
- Australie
0404 999 999
est un numéro australien valide
(02) 9999 9999
est également un numéro australien valide
(09) 9999 9999
n'est pas un numéro australien valide
Une expression régulière est très bien pour vérifier le format d'un numéro de téléphone, mais ça ne va pas vraiment pouvoir vérifier la validité d'un numéro de téléphone.
Je suggère de sauter une expression régulière simple pour tester votre numéro de téléphone et d'utiliser une bibliothèque telle que Google libphonenumber
(lien vers le projet GitHub) .
Présentation de libphonenumber!
En utilisant l'un de vos exemples les plus complexes 1-234-567-8901 x1234
, vous obtenez les données suivantes de libphonenumber
(lien vers la démo en ligne) :
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results:
E164 format +12345678901
Original format (234) 567-8901 ext. 123
National format (234) 567-8901 ext. 123
International format +1 234-567-8901 ext. 123
Out-of-country format from US 1 (234) 567-8901 ext. 123
Out-of-country format from CH 00 1 234-567-8901 ext. 123
Ainsi, non seulement vous apprenez si le numéro de téléphone est valide (ce qu'il est), mais vous obtenez également une mise en forme cohérente des numéros de téléphone dans votre région.
En prime, libphonenumber
dispose d'un certain nombre d'ensembles de données pour vérifier la validité des numéros de téléphone, ainsi, la vérification d'un nombre tel que +61299999999
(la version internationale de (02) 9999 9999
) renvoie comme un numéro valide avec mise en forme:
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results
E164 format +61299999999
Original format 61 2 9999 9999
National format (02) 9999 9999
International format +61 2 9999 9999
Out-of-country format from US 011 61 2 9999 9999
Out-of-country format from CH 00 61 2 9999 9999
libphonenumber vous offre également de nombreux avantages supplémentaires, tels que la capture de l'emplacement où le numéro de téléphone est détecté comme étant, et également l'obtention des informations de fuseau horaire à partir du numéro de téléphone:
PhoneNumberOfflineGeocoder Results
Location Australia
PhoneNumberToTimeZonesMapper Results
Time zone(s) [Australia/Sydney]
Mais le numéro de téléphone australien invalide ( (09) 9999 9999
) renvoie qu'il ne s'agit pas d'un numéro de téléphone valide.
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() false
La version de Google a du code pour Java et Javascript, mais les gens ont également implémenté des bibliothèques pour d'autres langues qui utilisent l'ensemble de données de numéro de téléphone Google i18n:
À moins que vous ne soyez certain que vous allez toujours accepter des numéros provenant d'un seul lieu, et qu'ils seront toujours dans un seul format, je vous suggère fortement de ne pas écrire votre propre code pour cela, et d'utiliser libphonenumber pour valider et afficher les numéros de téléphone.