En un momento de locura una vez, me escribió esta subrutina Perl basado en el dominio de las expresiones libro regular:
sub getRFC822AddressSpec
{
my ($esc, $space, $tab, $period) = ('\\\\', '\040', '\t', '\.');
my ($lBr, $rBr, $lPa, $rPa) = ('\[', '\]', '\(', '\)');
my ($nonAscii, $ctrl, $CRlist) = ('\200-\377', '\000-\037', '\n\015');
my $qtext = qq{ [^$esc$nonAscii$CRlist] }; # within "..."
my $dtext = qq{ [^$esc$nonAscii$CRlist$lBr$rBr] }; # within [...]
my $ctext = qq{ [^$esc$nonAscii$CRlist()] }; # within (...)
my $quoted_pair = qq{ $esc [^$nonAscii] }; # an escaped char
my $atom_char = qq{ [^()$space<>\@,;:".$esc$lBr$rBr$ctrl$nonAscii] };
my $atom = qq{ $atom_char+ # some atom chars
(?!$atom_char) # NOT followed by part of an atom
};
# rfc822 comments are (enclosed (in parentheses) like this)
my $cNested = qq{ $lPa (?: $ctext | $quoted_pair)* $rPa };
my $comment = qq{ $lPa (?: $ctext | $quoted_pair | $cNested)* $rPa };
# whitespace and comments may be scattered liberally
my $X = qq{ (?: [$space$tab] | $comment)* };
my $quoted_str = qq{ " (?: $qtext | $quoted_pair)* " };
my $word = qq{ (?: $atom | $quoted_str) };
my $domain_ref = $atom;
my $domain_lit = qq{ $lBr (?: $dtext | $quoted_pair)* $rBr };
my $sub_domain = qq{ (?: $domain_ref | $domain_lit) };
my $domain = qq{ $sub_domain (?: $X $period $X $sub_domain)* };
my $local_part = qq{ $word (?: $X $period $X $word)* };
my $addr_spec = qq{ $local_part $X \@ $X $domain };
# return a regular expression object
return qr{$addr_spec}ox;
}
my $spec = getRFC822AddressSpec();
my $address = q{foo (Mr. John Foo) @ bar. example};
print "$address is an email address" if ($address =~ qr{$spec});
¿Tiene usted conocimiento de los nombres de dominio internacionalizados http://www.icann.org/en/topics/idn/? ¿su expresión regular coincide con [email protected]õõ.bâr.com? – Jean
Si lee ese artículo que citó exhaustivamente, verá que a) las expresiones regulares solo le ayudarán a clasificar direcciones flagrantemente ilegales, b) tendrá falsos positivos y falsos negativos, o una expresión regular completamente difícil de manejar, yc) al final, tendrá que enviar un correo electrónico a esa dirección para verificar si no solo es sintácticamente válido sino, de hecho, es correcto (lo que ninguna expresión regular puede indicarle). –
echa un vistazo a esta publicación: http://solidlystated.com/scripting/proper-email-address-validation/ –