Liten kodsnutt som kollar att en epostadress stämmer på formen xxx@yyy.com och att domännamnet verkligen har en MX-pekare.
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
$email = "hej@hopp.nu";
$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
$okEmail = ($okEmail) && (getmxrr($check[1].$check[2],$temp));
if ($okEmail)
print "OK";
else
print "your head will implode in 5..4..3..2..1 seconds";
</font>
------------------
"Common sense is the collection of prejudices acquired by age 18" - Albert Einstein
[Redigerat av sgtpepper den 25 okt 2000]
Jag modifierade sgtpepper's script en aning då jag märkte att Windowsutgåvan av PHP inte verkar ha något stöd för funktionen "".
Här är en funktion som fungerar under Windowsplattformar:
<?php
$email = "jag@gillar.glass";
function getmxrr($hostname, &$mxhosts)
{
$mxhosts = array();
exec('nslookup -type=mx '.$hostname, $result_arr);
foreach($result_arr as $line)
{
if (preg_match("/.*mail exchanger = (.*)/", $line, $matches))
$mxhosts[] = $matches[1];
}
return( count($mxhosts) > 0 );
}
$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
$okEmail = ($okEmail) && (getmxrr($check[1].$check[2],$temp));
if ($okEmail) {
print "$email checked as OK! =)";
exit;
}
else {
print "$email is NOT a valid e-mail address since the host does not seem to have any MX-record!";
exit;
}
?>
Tjim =)
K++Medlem sedan juli 2002171 inlägg Observera att scripten ovan inte fungerar för tex john@härnösand.nu.
CaineMedlem sedan nov. 200413 inlägg Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?
HenrikAIMedlem sedan nov. 2004112 inlägg
Caine skrev:
Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?
Ändra {2,3} i nedanstående rad till {2,4} eller {2,5}.
$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
K++ skrev:
Observera att scripten ovan inte fungerar för tex john@härnösand.nu.
Borde fungera om man ändrar alla 0-9a-z- till 0-9a-zåäö-.
CaineMedlem sedan nov. 200413 inlägg
HenrikAI skrev:
Caine skrev:
Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?
Ändra {2,3} i nedanstående rad till {2,4} eller {2,5}.
$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
Det funkar inte!
Har någon något annat förslag?
K++ skrev:
Observera att scripten ovan inte fungerar för tex john@härnösand.nu.
Huhm, på vilket sätt fungerar det inte för john@härnösand.nu? Eller för att förtydliga: Varför fungear inte det exemplet? :)
mrblondeMedlem sedan aug. 20012 349 inlägg Onödigt vetande, men på Larry Ostermans blog diskuterades för ett tag sedan epostvalidering med regexp. De kom fram till att det är i stort sett omöjligt att lösa med regexp om man skll validera enligt RFC:n.
http://blogs.msdn.com/larryosterman/archive/2005/01/07/348548.aspx
Och här fortsätter diskussionen dagen efter om samma ämne.
http://blogs.msdn.com/larryosterman/archive/2005/01/10/350135.aspx
Larry Osterman är alltid intressant!
En riktig email verifierare skulle även verifiera så att TLD är korrekt.
Vad jag vet så är inte TLDn .xxx korrekt.
HansenMedlem sedan aug. 2000374 inlägg
jeliasson skrev:
En riktig email verifierare skulle även verifiera så att TLD är korrekt..
Exemplet ovan verifierar MX pekaren.
jeliasson skrev:
Vad jag vet så är inte TLDn .xxx korrekt.
ICANN har godkänt .xxx, så det är bara en tidsfråga innan det tas i drift.
http://www.icann.org/announcements/announcement-01jun05.htm
http://www.icmregistry.com/ICMPressRelease.html
ICANN tillhandahåller en lista på giltiga TLD's, http://data.iana.org/TLD/tlds-alpha-by-domain.txt
Ett regexp för att validera nuvarande TLD's:
(?:a(?:e(?:ro)?|r(?:pa)?|[cdfgilmnoqstuwz])|b(?:iz?|[abdefghjmnorstvwyz])|c(?:o(
?:m|op)?|[acdfghiklmnruvxyz])|d[ejkmoz]|e(?:[cegrst]|d?u)|f[ijkmor]|g(?:[abdefgh
ilmnpqrstuwy]|ov)|h[kmnrtu]|i(?:n(?:fo|t)?|[delmoqrst])|j(?:o(?:bs)?|[emp])|k[eg
himnrwyz]|l[abcikrstuvy]|m(?:u(?:seum)?|[acdghkmnopqrstvwxyz]|i?l)|n(?:a(?:me)?|
et?|[cfgilopruz])|o(?:m|rg)|p(?:ro?|[aefghklmnstwy])|r[eouw]|s[abcdeghijklmnortu
vyz]|t(?:r(?:avel)?|[cdfghjklmnoptvwz])|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw
]|qa)