VALIDITE N° TÉLÉPHONE ET ADRESSE EMAIL

Signaler
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
Whismeril
Messages postés
14451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28208-validite-n-telephone-et-adresse-email

Whismeril
Messages postés
14451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
370
Bonsoir, si si la politesse c'est bien aussi.

L'intérêt des Regex, c'est de ne pas utiliser des tas de IF Then Else, ni aucun outil de texte.
Vite fait, la Regex peut certainement être optimisée:
Private Function ValideNumeroTel(Numero As String) As String  
      Dim maRegex As New Regex("^(?<debut>(0|(\+33[ \.-]?)|(\(0\)[ \.-]?)|(\+33[ \.-]?\(0\)[ \.-]?))(?<zone>[1-9]))([ \.-]?(?<fin>\d\d)){4}$")
        Dim m As Match = maRegex.Match(Numero)
        If m.Success Then
            Return String.Format("0{0} {1} {2} {3} {4}", m.Groups("zone").Value, m.Groups("fin").Captures(0).Value, m.Groups("fin").Captures(1).Value, m.Groups("fin").Captures(2).Value, m.Groups("fin").Captures(3).Value)
        Else
            Return "N° invalide"
        End If
End Function


et un petit code pour tester
        Dim aTester As String() = {"0123456789", "01 23.45-67 89", "+33 1 23 45 6789", "(0) 1 23 45 67 89", "+33 (0) 1-23-45.67 89", "+33 (0)!1 23 45 67 89"}
        Dim results As New List(Of String)
        For Each numero As String In aTester
            results.Add(ValideNumeroTel(numero))
        Next


J'ai pris la liberté d'autorisé des caractères séparateurs (espace, point ou tiret) optionnels.

PS, le code en couleur, c'est mieux non?
PS2 les 07 et les 09 existent maintenant
blq
Messages postés
97
Date d'inscription
vendredi 22 octobre 1999
Statut
Membre
Dernière intervention
13 juin 2016
1
Juste une toute petite alternative pour apporter la prise en charge des numéros avec +33 ou (0)15678...

Dim thefirst As String = ""
       Dim thePhone As String = txtEntreTel.Text

        If Strings.Left(thePhone, 1) = "+" Then
            thefirst = Strings.Left(txtEntreTel.Text, 3)
            thePhone = Strings.Right(thePhone, thePhone.Length - 3)
        End If

        If InStr(thePhone, "(") And InStr(thePhone, ")") And thefirst.Length > 0 Then thePhone = Strings.Right(thePhone, thePhone.Length - InStr(thePhone, ")"))

        thePhone = Regex.Replace(thePhone, "[^\d]", "")

        If Strings.Left(thePhone, 1) <> "0" Then thePhone = "0" & thePhone

        If thePhone = Regex.Match(thePhone, "^0[1-68][0-9]{8}$").ToString Then
            thePhone = Convert.ToInt32(Regex.Match(thePhone, "^0[1-68][0-9]{8}$").ToString).ToString("0# ## ## ## ##")
            txtResultTel.Text = "N° valide : " & If(thefirst.Length > 0, thefirst & Strings.Right(thePhone, thePhone.Length - 1), thePhone)
        Else
            txtResultTel.Text = "N° invalide"
        End If
OneHacker
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Impécable ! 10/10
cs_christoni
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
1 novembre 2010
5
Bonjour MoiDebutantVB
Je pensais qu'une adresse Email ne devait pas comprendre de majuscules,
comme chez Wanadoo.
Donc, dans mon code, je les avais interdites.
Pour les autoriser, à la ligne 160, dans la proc « Private Sub
tnTester_Click ? »
il faut remplacer :

If Regex.IsMatch(txtEMail.Text, _
"^[a-z09._-]+@[a-z09._-]{2,}\.[a-z]{2,4}$") = True Then

par :

If Regex.IsMatch(txtEMail.Text, _
"^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$") = True Then