CONTRÔLER LA SAISIE D'UN E-MAIL

Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
- 23 janv. 2007 à 12:41
cs_Malkuth
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
- 13 mai 2008 à 19:04
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/41227-controler-la-saisie-d-un-e-mail

cs_Malkuth
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
13 mai 2008 à 19:04
par expression réguliére on peut faire comme ceci :
( code en .NET )
Imports System.Text.RegularExpressions
Module Validation
Const AutorizedMailCharPattern = "[a-z0-9_]";
Const ValidMailPattern = "^#+(\.#+)*@#+(\.#+)*?\.#{2,4}$";
Dim RX_MailCheck As New Regex(ValidMailPattern.Replace("#",AutorizedMailCharPattern,RegexOptions.Compiled Or RegexOptions.IgnoreCase));

Function IsEmailValid(Email As String) As Boolean
Return RX_MailCheck.IsMatch(Email);
End Function

End Module

Je suis désolé de présenté se code en .Net, toutefois je suis persuadé que les expressions réguliéres existe en VB et la syntaxe doit être sufisement proche pour que l'exemple soit retenu.

On voit d'emblé que le code est bien plus simple que les codes sans expression réguliére, il est aussi trés rapide (en fait il pourais bien être plus rapide que le code sans expression réguliére, il prend de nombreux cas en compte dont certain ne sont pas envisagé dans les codes précédent.

Je post ceci afin de popularisé un peu les expressions réguliéres, certains les connaissent trés bien mais beaucoup ignore tout de leur puissance, elles sont pourtant un outil incontournable dans la validation de données...
andalo
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012

13 mai 2008 à 14:33
en effet, on doit aimer se compliquer la vie, merci pour l'aide.
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
13 mai 2008 à 12:22
False, valeur par default de la variable automatique, crée puor stocker le retour de la fonction. elle ne conserve pas sa valeur d'un appel a l'autre (même si appels recursifs)

pos_arobase2 inutile... fais un If Instr...
andalo
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012

13 mai 2008 à 12:17
ok, j'ai pris en compte tout ca. une question tout de même, false est la valeur par defaut d'une fonction, même si je me suis au prealable servi de la fonction et qu'elle a retourné true?, si je m'en ressert ensuite, j'imagine donc qu'elle est reinitialisé a false automatiquement?
sinon j'ai aussi corrigé une petite erreur dans la dernière condition.

Function mailvalide(email) As Boolean
Const CarAutorise = "abcdefghijklmnopqrstuvwxyz0123456789.@"
Dim i As Integer, pos_point As Integer, pos_point2 As Integer, pos_arobase As Integer, pos_arobase2 As Integer
If Len(email) < 6 Or IsNull(email) Then Exit Function 'si longueur de chaine invalide, on sort de la fonction
If InStr(1, email, ".@") Or InStr(1, email, "@.") Then Exit Function 'si .@ ou @. est présent, on sort de la fonction
pos_arobase = InStr(1, email, "@")

If pos_arobase < 2 Then
Exit Function 'si arobase inexistant ou en premier caractère, on sort de la fonction
Else
pos_arobase2 = InStr(pos_arobase + 1, email, "@")
If pos_arobase2 > 0 Then Exit Function 'si un deuxieme arobase est trouvé on sort de la fonction
End If

pos_point = InStr(pos_arobase + 1, email, ".")
If pos_point < pos_arobase Then Exit Function 'si il n'y a pas de point apres l'arobase, on sort de la fonction
If Right(email, 1) "." Or Right(email, 1) "@" Then Exit Function ' si @ ou . en derniere position, on sort
If InStr(pos_arobase, email, "..") > 0 Then Exit Function 'si .. present apres @ on sort de la fonction
i = 0
For i = 1 To Len(email)
If InStr(1, CarAutorise, Mid(email, i, 1), vbTextCompare) < 1 Then
Exit Function 'si on trouve autre chose qu'un caractère autorisé, on sort de la fonction
End If
Next
mailvalide = True 'si on est pas sortie avant, c'est que l'adresse mail est valide
End Function
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
13 mai 2008 à 10:38
Dim pos_point, pos_point2, pos_arobase, pos_arobase2 As Integer
pos_point, pos_point2, pos_arobase sont des Variant, ici

mailvalide = False
pas besoin d'initialiser, c'est la valeur par defaut d'un boolean

i est non déclaré (pense a jouer avec Option Explicit)

Mid(email, Len(email), 1) => fonction Right

InStr(1, CarAutorise, LCase(Mid(email, i, 1)))
pas de LCase a faire dans ce genre de choses... Instr permet de spécifier vbTextCompare comme dernier argument
Afficher les 11 commentaires