8
votes

C # Regex Numéro de téléphone Vérifier

J'ai ce qui suit pour vérifier si le numéro de téléphone est au format suivant (Xxx) xxx-xxxx. Le code ci-dessous retourne toujours vrai. Pas certain de pourquoi. xxx


4 commentaires

Avez-vous essayé de commencer par une plus simple regex (par exemple une pour correspondre à 3 chiffres), puis la construire?


Dupliqué possible de Une regex complète pour la validation de numéro de téléphone


Quels numéros de téléphone sont-ils de retour pour où vous vous attendriez à renvoyer false? Savez-vous que regex.match () ne nécessite pas la chaîne entière pour correspondre?


@TIMPIETZCKER - TIM, que dois-je utiliser à la place du match pour vérifier la chaîne entière?


5 Réponses :


10
votes

Ce n'est pas toujours match, mais il correspondra à n'importe quelle chaîne que contient trois chiffres, suivie d'un trait d'union, suivi de quatre chiffres supplémentaires. Cela correspondra également s'il y a quelque chose qui ressemble à un code régional sur le devant de cela. Donc, ceci est valide selon votre regex: xxx

pour valider que la chaîne contient un numéro de téléphone et rien d'autre , vous devez ajouter ancrages au début et à la fin de la regex: xxx


0 commentaires

6
votes

Alan Moore a bien expliqué ce que votre expessure fait réellement. +1

Si vous souhaitez correspondre exactement "(xxx) xxx-xxxx" et absolument rien d'autre, ce que vous voulez est xxx


0 commentaires

14
votes

La plainte générale concernant les modèles de regex pour les numéros de téléphone est qu'elles ont besoin d'une tâche de mettre dans les caractères en option em> en tant que tirets et autres éléments.

Pourquoi ne peuvent-ils pas être facultatifs et avoir le motif pas se soucier em> s'ils sont là ou non? P> blockQuote>

Le modèle ci-dessous fait des tirets, des périodes et des parenthèses facultatif pour l'utilisateur et se concentre sur les numéros à la suite de captures nommées. P>

Le motif est commenté (à l'aide du # CODE> et couvre plusieurs lignes) afin d'utiliser l'option REGEX ignorePatternwhiteespace code> à moins que l'on supprime les commentaires. Pour ce drapeau n'affecte pas le traitement des regex, il ne permet que de commenter le motif via le caractère # code> pause de caractères et de ligne. P> xxx pré>

ce qui précède Schéma vient de rechercher 10 numéros et ignore les caractères de remplissage tels que un ( code> ou un tableau de bord - code> ou un espace ou un onglet ou même un . code>. . Les exemples sont p> xxx pré>


différentes variantes du même motif strong> p>

modèle sans commentaires ne doivent plus utiliser IgnorePatternnwhespace Code>: p>

^\(?(?<AreaCode>\d{3})[\).\s]?(?<Prefix>\d{3})[-\.\s](?<Suffix>\d{4})(?!\d)


2 commentaires

Fermer, mais l'OP doit permettre à un espace après le ) après l'indicatif régional.


Gotcha rr. Puis changez le match mais ne capturez pas le) ou. à (?: [). \ s] *) # facultatif) ou. [Et espace]



6
votes

Voici le code C # que j'utilise. Il est conçu pour obtenir tous les numéros de téléphone à partir d'une page de texte. Il fonctionne pour les patchs suivants: 0123456789, 012-345-6789, (012) -345-6789, (012) 3456789 012 3456789, 012 345 6789, 012 345-6789, (012) 345-6789, 012.345.6789 < Pré> xxx


2 commentaires

Que diriez-vous de ce type de téléphone no: +9412 345 67891


Yay ... génial! :)



2
votes

Aucune des commentaires ci-dessus prend soin des numéros internationaux comme +33 6 87 17 00 11 (qui est un numéro de téléphone valide pour la France par exemple). Je le ferais dans une approche en deux étapes: 1. Supprimez tous les caractères qui ne sont pas des chiffres ou du caractère '+' 2. Vérifiez que le signe + est au début ou non. Longueur de contrôle (cela peut être très difficile car cela dépend des systèmes de numéro de pays locaux). Maintenant, si votre numéro commence avec +1 ou si vous êtes sûr que l'utilisateur est aux États-Unis, vous pouvez appliquer les commentaires ci-dessus.


0 commentaires