Téléchargé 1 fois
Vote des utilisateurs
0
0
Détails
Licence : Freeware
Mise en ligne le 31 mai 2011
Plate-formes :
Linux, Mac, Windows
Langue : Français
Référencé dans
Navigation
Comment tester la validité d'une adresse électronique ?
Comment tester la validité d'une adresse électronique ?
Pour tester la validité d'une adresse électronique, inutile de s'acharner à trouver la bonne expression régulière. Il existe des modules perl le faisant pour nous proprement.
Voici un exemple de codes utilisant des modules différents Email::Valid et Mail::CheckUser.
Voici un exemple de codes utilisant des modules différents Email::Valid et Mail::CheckUser.
Coucou,
La fonction 'recherche avancée' m'a une fois de plus bien servie.
Quand il s'agit de récupérer des milliers d'adresses électroniques noyées dans un fichier texte, une regexp est-il utile? Elles sont valides, il ne faut pas le vérifier, simplement les extraire.
style
ou en plus court
petite curiosité trouvée au hasard sur le net :
... je suppose que c'est à ce code barbare, que je ne comprends d'ailleurs pas, que tu fais allusion en disant 'Pour tester la validité d'une adresse électronique, inutile de s'acharner à trouver la bonne expression régulière.'
Merci
La fonction 'recherche avancée' m'a une fois de plus bien servie.
Quand il s'agit de récupérer des milliers d'adresses électroniques noyées dans un fichier texte, une regexp est-il utile? Elles sont valides, il ne faut pas le vérifier, simplement les extraire.
style
Code : | Sélectionner tout |
if($line =~ m/([a-z_\-.0-9]+@[a-z_\-.0-9]+)/i)
Code : | Sélectionner tout |
if($line =~ m/([\w\-\.]+@[\w\-\.]+)/)
petite curiosité trouvée au hasard sur le net :
le regexp d'un mail est assez compliquer, pour valider si le mail est bon ca donne ca :
Code : | Sélectionner tout |
1 2 3 4 | /^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\" )|([A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\ \+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\ ~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0 -9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0- 4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0 -9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|( 2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9 ]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9 ])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9]))?)+[A-Za-z\\-]*)) $/D |
Merci
Tout à fait .
Pour ton code où tu ne souhaites qu'extraire les adresses emails, il y a surement un module nous permettant d'avoir le bon pattern pour la regex, il faut juste chercher sur le CPAN. Si je le retrouve, je te le mentionne ici et on pourrait le rajouter dans les sources.
Pour ton code où tu ne souhaites qu'extraire les adresses emails, il y a surement un module nous permettant d'avoir le bon pattern pour la regex, il faut juste chercher sur le CPAN. Si je le retrouve, je te le mentionne ici et on pourrait le rajouter dans les sources.
Voici mon code terminé qui fonctionne parfaitement (jusqu'à preuve du contraire) :
... je ne dis pas qu'il est optimal au niveau temps d'exécution mais ça me suffit largement.
Pourquoi faire simple si il y a compliqué ... heuh non, l'inverse
N'est-ce pas amplement suffisant :
nb : le sous-programme supprime_doublon, je le dois à Jedaï ... merci encore à lui, ça me sert tout le temps.
EDIT ; un grand merci à Djibril pour son sous-programme supprime_doublon
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/usr/local/bin/perl use strict; use warnings; use List::Compare; # chemin vers les fichiers my $file_path1 = 'P:/Theorie/Driss/adresses_mail/New_Yeast_2011.txt'; my $file_path2 = 'P:/Theorie/Driss/adresses_mail/retour_yeast_email_format.txt'; # récupérér l'entiereté du premier fichier dans une variable $file_content1 open my($file1), '<', $file_path1 or die "Can't open $file_path1 : $!\n"; my $file_content1 = do { local $/; <$file1> }; close $file1; # récupérér l'entiereté du second fichier dans une variable $file_content2 open my($file2), '<', $file_path2 or die "Can't open $file_path2 : $!\n"; my $file_content2 = do { local $/; <$file2> }; close $file2; # récupération des adresses électroniques dans deux listes @mail_list1 et @mail_list2 my @mail_list1 = $file_content1 =~ m/([\w\-\.]+@[\w\-\.]+)/g; my @mail_list2 = $file_content2 =~ m/([\w\-\.]+@[\w\-\.]+)/g; # suppression des adresses électroniques doubles @mail_list1 = &supprime_doublon(\@mail_list1 ); @mail_list2 = &supprime_doublon(\@mail_list2 ); # affichage du nombre d'adresses uniques pour chaque liste print "mail_list1 : ".@mail_list1."\n"; print "mail_list2 : ".@mail_list2."\n"; # création d'une comparaison de listes avec le module List::Compare my $lc = List::Compare->new(\@mail_list1 , \@mail_list2); # recherche des adresses n'apparaissant que dans la première liste my @Lonly = $lc->get_unique; print "adresses de New Yeast 2011.xls sans celles de Retour yeast email.txt : ".@Lonly."\n"; print (join "\n", @Lonly); print "'\n\n"; sub supprime_doublon{ my $self=shift; my %saw; my @result = @$self; #deréférence le tableau, donc on le récupère et le copie dans @result #pour eviter de travailler sur le tableau d'origine et le modifier. undef %saw; @saw{@result} = (); #chaque case de @result est mis en clef dans %saw avec une valeur nulle. et comme un @result = sort keys %saw; #hash n'a pas deux clefs identiques, redondances supprimées. return(@result); } |
... je ne dis pas qu'il est optimal au niveau temps d'exécution mais ça me suffit largement.
Envoyé par Djibril
N'est-ce pas amplement suffisant :
Code : | Sélectionner tout |
my @mail_list1 = $file_content1 =~ m/([\w\-\.]+@[\w\-\.]+)/g;
nb : le sous-programme supprime_doublon, je le dois à Jedaï ... merci encore à lui, ça me sert tout le temps.
EDIT ; un grand merci à Djibril pour son sous-programme supprime_doublon
supprime_doublon c'est ma procédure mais de toute façon, jedai aurait été capable de la faire également . Quant à ta regex, si elle te suffit, pas besoin de se compliquer la vie .
Le module est Email::Find.
Je vais rajouter un programme dans nos sources à télécharger.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.