Check mail formulier - fout
Controle gebeurt goed, alleen als ik een mail adres gebruik om wat in deze format is: [email protected] kom ik niet door de controle heen.
Het komt volgens mij dat het 2de karakter een punt(.) is en er slechts 1 karakter nog eens voor staat.
Dit is het script, wat zit er fout of moet ik veranderen?
function checkmail($mail)
{
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;
return $valid;
}
Alvast bedankt.
Verder kan ik je niet helpen, ben nog maar een noob in php.
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = 1;
Ik heb al dingen aangepast om te testen maar, helaas kom ik zelf niet verder als ik een mailadres invul zoals [email protected]
Gewijzigd op 08/09/2010 16:27:20 door B S
- ik zou geen eregi gebruiken, maar preg_match. verschillende redenen voor, zal ik nu niet uitleggen
- je gebruikt hier $mail, terwijl je ervoor $email_resolved en $email_host gebruikt, misschien gaat daar ook iets fout?
- let wel dat je hiermee de parameter i moet meegeven (hoofdletter-ongevoelig), aangezien je alleen op lowercase letters controleert
Ik zou de regex daarnaast zoals onderstaand aanpassen. Ik weet trouwens niet waarom die twee \\ daar voor de . staan, volgens mij moet dat een enkele zijn om de speciale betekenis van de . te omzeilen? (als dat is omdat het tussen ""-quotes staat, dan is het goed. ik gebruik die quotes eigenlijk zelden)
^[0-9a-z]([0-9a-z-_.~]?)*@[0-9a-z]([0-9a-z-.]?)*\.[a-z]{2,4}$
Een reguliere expressie die de meeste email-adressen zal matchen:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
(bron: http://www.regular-expressions.info/email.html )
Bij deze is ook de parameter i nodig. Het enige verschil is eigenlijk dat hierbij de '~' niet inbegrepen is, die kun je er zelf bij zetten.
Ik hoop hiermee je vraag beantwoord te hebben.