E-Mail Syntax checken
Sascha Müller
- perl
0 Christian Kruse0 GONZO
Hallo,
mit folgendem "Sucher" checke ich die Syntax der eingegebenen E-Mail Adresse. Die Problematik wurde hier schon einmal diskutiert, auch, dass dieser "Checker" nicht 100%ig sei. Dem ist auch so, zum Beispiel läst er Umlaute durchgehen, und eine E-Mail Adresse wie @gmx.net ist für ihn auch o.k. Könnte man diesen "Checker" noch ein wenig optimieren?
if($DATA{"email"} =~ /[ |\t|\r|\n]*"?([^"]+"?@[^ <>\t]+.[^ <>\t][^ <>\t]+)[ |\t|\r|\n]*/)
{
print "O.K.\n";
}
else
{
print "Falsch\n";
}
Vielen Dank für jegliche Mithilfe.
Ciao
Sascha
Hallo,
Könnte man diesen "Checker" noch ein wenig optimieren?
Einen RegEx, der eine EMail-Adresse syntaktisch 100% ueberprueft und alles
abdeckt, was in der RFC beschrieben ist, gibt es nicht. Das, was IMHO am
naechsten daran herankommt, ist das hier:
Aber Vorsicht: die Sub 'is_email' ist nicht alles. Die Haupt-Arbeit geschieht
in 'BEGIN'.
Gruesse,
CK
Hallo,
ich machs immer so:
#!/usr/bin/perl -wT
use strict;
use Net::DNS;
sub is_email
{
( my $email) = @_;
return 0 if $email !~ /[1]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff])(?:.[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff]))*@[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff])(?:.[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff]))+$/o;
( my $maildomain = $email) =~ s/[2]*@//;
if( !( my @mx = mx( $maildomain) ) )
{
return 0;
}
return 1;
} # is_email
Das ist ein etwas abgespeckterer Ausdruck, der
keine Comments und Routingangaben erlaubt.
Wer benutzt die denn schon, bzw. kann sie weiterverarbeiten?
Außerdem prüfe ich noch, ob für die Domain ein MX existiert.
CYa
GONZO