Fonction verification email avec domaines

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction verification email avec domaines

par AB » 26 oct. 2007, 01:26

En attendant la réponse de Ripat, voici la méthode que j'utilise ainsi qu'un peu de doc

http://atranchant.developpez.com/code/v ... /index.php


Oups c'est la même que fgranjon dans son premier message.

Enfin bon ça vous donne la source et c'est documenté.

par Invité » 25 oct. 2007, 17:26

Oui, j'ai vu 2 voir 3 regex de plus de 7000 caracteres qui soit disant replissent tous les critère de la RFC822.
J'ai essayer les 2 que j'ai trouvé et cela ne valide pas forcement tout.
Apres je code en c++, j'ai peut etre fait une erreur en insérant des "\"

Mais pour moi ces regex, sont incompréhensible et in-maintenable.
le gars aurait du décomposer son expression en plusieurs expressions puis de concaténer le tout. Mais bon c'est mon simple avis.

par fgranjon » 25 oct. 2007, 11:05

Ca me fait pensé a une regex que j avais vu pour la validation d'adresse mail, une regex qui devait faire une bonne dizaine de ligne ^^

par Akta » 25 oct. 2007, 09:52

Oui, j'utilise celle la qui correspond a peut pres à la RFC822 sans les quoted string ni les commentaires.
Mais le regex est compréhensible.

Sinon j'ai trouvé ca aussi comme regex possible:

Code : Tout sélectionner

^[a-z0-9!$'*+\-_]+(\.[a-z0-9!$'*+\-_]+)*@([a-z0-9]+(-+[a-z0-9]+)*\.)+([a-z]{2}|aero|arpa|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|travel)$
cela provient du site:http://www.dotnet-news.com/lien.aspx?ID=23502
ils disent que c'est la norme RCF3696 (celle en cours) avec quelques regles non codées


Mais je serai tout de meme tres intéressé par le regex de notre ami ripat

par fgranjon » 25 oct. 2007, 08:54

Pour info, j'utilisais ca :
$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
$regex = '/^' . $atom . '+' . '(\.' . $atom . '+)*' .'@' .'(' . $domain . '{1,63}\.)+'.$domain.'{2,63}$/i';

preg_match($regex, $emailAddress);

par Akta » 25 oct. 2007, 00:39

Ripat, t'aurais pu nous mettre t'as formule magique. Ca aurait pu servir a tout le monde, moi le premier.

par Ripat » 27 juil. 2007, 17:47

Tu pourrais faire tout ça en une seule regex. A propos, donne la préférence aux fonctions PCRE (preg_*) plus rapides et plus riches.

Ton motif de validation n'est pas tout à fait correct au sens des RFC 2822 car il accepte des adresses du type [email protected]. Les RFC précisent qu'un nom de domaine ne peut ni commercer ni finir par le tiret, or ta classe [a-z0-9-] l'autorise. Idem pour le motif du "top level domain name" .fr .com etc...

De plus il manque des caractères autorisés dans motif qui valide l'adresse. Tels que + % = et d'autres.

Les adresses ripat+php/[email protected] ou bien $[email protected] sont valides (voir les exemples de RFC 3696 --> http://tools.ietf.org/html/rfc3696 ).

J'ai un motif sous le coude qui validera 99.99 % des adresses email selon les RFC. Mais il est, heu.. disons chargé (j'ai pas dit lourd), mais efficace.

par Invité » 27 juil. 2007, 11:24

Voilà je viens de terminer

Oups je suis pas identifier, tampis :roll:

Voilà la fonction entière qui peut être amélioré mais c'est une base :wink:
function verifmail($mail) {
$ext_ok= array('.fr','.com','.net','.org');
	if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$mail)) { // VERIFIER CARACTERES

		$after= strstr($mail, '@'); // RECUPERER CARACTERES A PARTIR DU AROBASE
		echo '<p>Resultat : '.$after.'</p>'; // DEBUG

		$last= substr($mail,-5);// RECUPERER 5 DERNIERS CARACTERES
		echo '<p>Resultat : '.$last.'</p>'; // DEBUG

			if (ereg("\.",$last)) { // VERIFIER PRESENCE POINT EN FIN DE CHAINE
				$pos_point= strrpos($last, '.'); // RECUPERER VALEUR NUMERIQUE POSITION DU POINT
				echo '<p>Resultat : '.$pos_point.'</p>'; // DEBUB
				$ext= strstr($last, '.'); // RECUPERER CARACTERES A PARTIR DU POINT
				echo '<p>'.$ext.'</p>'; // DEBUG
					if (in_array($ext,$ext_ok)) {
						echo 'Adresse valide'; // BINGO
					}
			}
			else {
				echo '<p>Pas de POINT dans les 4 derniers caracteres</p>';
			}
	}
	else {
		echo '<p>Caracteres invalides OU pas de POINT / AROBASE</p>';
	}
}

par supercanard » 26 juil. 2007, 18:03

Tu pourrais ainsi aisément tester si cette chaine est incluse dans ton tableau avec in_array() :)
Mais ca marche aussi avec une boucle, vi :)
Merci =)

Alors en fait je reviens en arrière...
Une fois que j'ai récupéré comme dans mon exmple les 4 derniers caracteres, je fait un
strrpos($machaine, "." 
pour recuperer la valeur numérique de sa position ?

par Ryle » 26 juil. 2007, 17:58

Tu pourrais ainsi aisément tester si cette chaine est incluse dans ton tableau avec in_array() :)
Mais ca marche aussi avec une boucle, vi :)

par supercanard » 26 juil. 2007, 17:57

Le plus simple est d'extraire la derniere portion du mail, avec un substr() et un strrpos() pour reperer le dernier point par exemple. Tu pourrais ainsi aisément tester si cette chaine est incluse dans ton tableau avec in_array() :)

Mais entre nous, vu les quelques 200 différentes extensions possibles (une par pays, plus les .com, .net, etc.), c'est peut être se prendre la tête pour pas grand chose...
EDIT : A pardon tu m'a donné la solution... in_array() ;)

Merci de ta réponse
En fait mon problème n'est pas au niveau de la récup des caractères après le point mais plutot pour tester si la chaine de caractère récupérée est présente dans un tableau.
J'imagine qu'avec une boucle qui liste le tableau et le compare ça peut se faire mais il y a peut être plus rapide et plus simple ?

Sinon oui effectivement c'est prise de tête, mais je cherche surtout a savoir comment faire :D Histoire d'apprendre aussi :wink:

par Ryle » 26 juil. 2007, 17:50

Le plus simple est d'extraire la derniere portion du mail, avec un substr() et un strrpos() pour reperer le dernier point par exemple. Tu pourrais ainsi aisément tester si cette chaine est incluse dans ton tableau avec in_array() :)

Mais entre nous, vu les quelques 200 différentes extensions possibles (une par pays, plus les .com, .net, etc.), c'est peut être se prendre la tête pour pas grand chose...

Fonction verification email avec domaines

par supercanard » 26 juil. 2007, 17:16

Bonjour,

Je viens de faire une petite fonction pour tester les emails :
function verifmail($mail) {

	if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$mail)) { // VERIFIER CARACTERES
  	echo "<p>etape 1 ok</p>";

		$after= strstr($mail, '@'); // RECUPERER CARACTERES APRES AROBASE
		echo '<p>Resultat : '.$after.'</p>';

		$last= substr($mail, -4);// RECUPERER 4 DERNIERS CARACTERES APRES POINT
		echo '<p>Resultat : '.$last.'</p>';

			if (ereg("\.",$last)) { // VERIFIER PRESENCE POINT EN FIN DE CHAINE
				echo "<p>etape 2 ok</p>";
			}
			else {
				echo '<p>Pas de POINT dans les 4 derniers caracteres</p>';
			}
	}
	else {
		echo '<p>Caracteres invalides OU pas de POINT / AROBASE</p>';
	}
}
Maintenant je voudrais rajouter une verification du nom de domaine, donc des caractere qui se trouvent après le point. Je pensé comparer la chaine de caractere à un tableau de ce type :
$variable = array('fr','com','net','org'); 
Mais je ne sais pas comment m'y prendre pour faire cette comparaison.... :?

Bonne fin de journée ^