Fonction permettant de tester si un e-mail a un format valide (a peu près)
renvoi true si l'mail est bon false si il est faux
Source / Exemple :
function TestMail(EMail:string):boolean;
var
a,b,c:integer;
TmpS,accept:string;
begin
TmpS := lowercase(EMail);
Result := True;
accept := 'abcdefghijklmnopqrstuvwxyz0123456789-@._~'; //caractères acceptés
//test caractères non acceptés
for a:=1 to length(TmpS) do begin //Pour chaque caractère de l'e-mail
c:=0;
for b:=1 to length(accept) do //si il est pas dans la liste des acceptés
if copy(TmpS,a,1) = copy(accept,b,1) then c:=1;
if c=0 then Result :=false; //c pas bon
end;
//test compte '@' = 1
b:=0;
for a:=1 to length(TmpS) do //pour tous les caractères
if copy(TmpS,a,1) = '@' then b:=b+1; //si il trouve @ il ajoute 1
if b <> 1 then Result := False; //comme il faut un seul @,
//si il en trouve plusieurs c pas bon
//test compte '.' = 0
if pos('.',TmpS) = 0 then Result := false; //si ya 0 '.' dans l'email c pas bon
end;
Conclusion :
TestMail('machin@serveur.com') renvera true
TestMail('tralala') renvera false
TestMail('machin@serveur@com') renvera false
TestMail('##//Waza\\ {...}@bidule.com') renvera false
27 sept. 2010 à 10:20
au lieu de copy(TmpS,a,1) vous faites mieux d'utiliser TmpS[a]
Puis, au lieu de :
for a:=1 to length(TmpS) do
begin
if pos(copy(TmpS,a,1),accept) < 0 then Result := False
end;
je propose :
Email_Bon := True; // j'assume que c'est bon
for a:=1 to length(TmpS) do
if pos(TmpS[a],accept) = 0 then
begin
Email_Bon := False; // je suis sûr que c'est pas bon
Break // je quitte la boucle
end;
// Pour vérifier la présence du point au delà du @ :
if Email_Bon then
begin
s:=Email; Delete(s, 1, pos('@', s));
if pos('.', s)=0 then Email_Bon := false
end
22 mai 2006 à 16:59
//Test des caractères non acceptés
for a:=1 to length(TmpS) do
begin
if pos(copy(TmpS,a,1),accept) < 0 then
Result := False
end;
//Test du nombre de @
b:=0;
for a:=1 to length(TmpS) do //pour tous les caractères
if copy(TmpS,a,1) = '@' then b:=b+1; //si il trouve @ il ajoute 1
if b <> 1 then
Result := False;
//Test . ou @ qui se suivent
for a:=1 to length(TmpS) do //pour tous les caractères
if ( (copy(TmpS,a,1) '@') or (copy(TmpS,a,1) '.') ) and
((copy(TmpS,a+1,1) '@') or (copy(TmpS,a+1,1) '.')) then
Result := False;
//Test . ou @ en premier ou dernier caractere
if (copy(TmpS,1,1) '@') or (copy(TmpS,1,1) '.') or
(copy(TmpS,length(TmpS),1) '@') or (copy(TmpS,length(TmpS),1) '.') then
Result := False;
//Test présence d'un . après le @
if pos('.',copy(TmpS,pos('@',TmpS)+1,length(TmpS)-pos('@',TmpS)-1)) = 0 then
Result := false;
25 nov. 2003 à 23:16
Or, pour ne pas avoir d'erreur il faut vérifier qu'il y ait un '.' APRES le @.
25 nov. 2003 à 20:09
regarde a la fin du source :
if pos('.',TmpS) = 0 then Result := false; //si ya 0 '.' dans l'email c pas bon
25 nov. 2003 à 17:54
nom.prenom@libertysurf
Et oui, mon ptit gars, il y a bien un . et un @ maisle problème est qu'il n'y a pas de . après le nom du provider... Et ca le serveur aime pas.
Donc suggestion : Il faudrait que ta source vérifie s'il y a bien ce fameux point.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.