VALIDITE N° TÉLÉPHONE ET ADRESSE EMAIL

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 17 déc. 2004 à 20:35
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 18 mars 2016 à 22:19
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 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 18/03/2016 à 22:20
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
Modifié par NHenry le 18/03/2016 à 21:43
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 2
5 nov. 2006 à 02:26
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 7
7 juil. 2005 à 19:09
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
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
20 déc. 2004 à 13:57
merci j'ai trouve il faut rajouter
dim Regex as system.text.regularexpressions.regex
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
20 déc. 2004 à 13:47
Salut,
chez moi il me souligne REGEX que puis je faire pour arranger cela
merci
cs_christoni Messages postés 140 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 1 novembre 2010 7
19 déc. 2004 à 11:02
Ce bout de code n'est qu'une base que l'on peut adapter
selon ses besoins.
Je ne connais pas la syntaxe téléphonique des Us et pour
max12, et suivant ce que j'ai compris (Hors N° d'urgence),
la regex suivante devrait convenir :
"^[01]?([2-9]\d{2})?\d{3}\d{4}$"
Et le format :
"# (###) ###-####"
Et aussi convertir en ToInt64, car 11 chiffres dépassent
la capacité de Integer (Int32).
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
17 déc. 2004 à 20:37
Il faudrais aussi prendre en compte les numéros américains (USA, Canada, etc ..).

1-800-364-1234
418-567-1234

Les 7 derniers chiffres suffisent pour un appel local.

Le premier peut avoir 3 chiffre et moins, le dernier a 4 chiffre, sauf dans le cas de numéro à 3 chiffres comme celui de l'urgence : 911 ou *69 ou #12

Enfin, voilà une piste et j'oublie surement des trucs.

Sinon pour la source je n'ai pas testé puisque je ne connais pas assez la syntaxe européenne.

@+
Rejoignez-nous