Tout d'abord, votre validateur de format n'est manifestement approprié que pour les formats NANP (indicatif de pays +1). Votre application sera-t-elle utilisée par une personne dont le numéro de téléphone ne se trouve pas en Amérique du Nord ? Si c'est le cas, vous ne voulez pas empêcher ces personnes d'entrer un numéro [international] parfaitement valide.
Deuxièmement, votre validation est incorrecte. Les numéros NANP se présentent sous la forme NXX NXX XXXX
où N
est un chiffre de 2 à 9 et X
est un chiffre de 0 à 9. En outre, les indicatifs de zone et les centraux peuvent ne pas se présenter sous la forme suivante N11
(terminer par deux "un") pour éviter toute confusion avec les services spéciaux sauf les numéros dans un indicatif non géographique (800, 888, 877, 866, 855, 900) peuvent avoir une N11
échange.
Ainsi, votre expression rationnelle transmettra le numéro (123) 123 4566 même s'il ne s'agit pas d'un numéro de téléphone valide. Vous pouvez corriger cela en remplaçant \d{3}
avec [2-9]{1}\d{2}
.
Enfin, j'ai l'impression que vous validez les données de l'utilisateur dans un navigateur web. Rappelez-vous que la validation côté client est seulement un commodité que vous fournissez à l'utilisateur ; vous devez toujours valider toutes les entrées (à nouveau) sur le serveur.
TL;DR n'utilisez pas d'expression régulière pour valider des données complexes du monde réel telles que des numéros de téléphone ou URL . Utiliser un bibliothèque spécialisée .