Countless scripts have been written for validating email addresses in PHP, I've used a few and most seem to work fine. i came across this article (http://www.linuxjournal.com/article/9585) which discusses IETF's documents concerning email address standards. Valid email address are not just in the form of someone@domain.com. Backslashes, more than one "@" symbol are valid in email addresses as well as other symbols (I didn't look into it much!). There is a lengthy script for validating email addresses included in the article.
However, I couldn't get it to work, maybe I'm just too impatient. There is a good script included in the article which doesn't account for backslashes and the @ symbol. This works quite well for me. (I know, it's bad practice!). I've copied the code and indented it for readability below (and changed the function name, I've tested it out on a live site).
function checkEmail($email)
{
//First, we check that there's one @ symbol,
//and that the lengths are right.
if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))
{
//Email invalid because wrong number of characters
//in one section or wrong number of @ symbols.
return false;
}
//Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++)
{
if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",$local_array[$i]))
{
return false;
}
}
//Check if domain is IP. If not,
//it should be valid domain name
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1]))
{
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2)
{
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++)
{
if(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|↪([A-Za-z0-9]+))$",$domain_array[$i]))
{
return false;
}
}
}
return true;
}
If you find this script isn't conforming to correct standards, there's a more complex and updated one at google code:
http://code.google.com/p/php-email-address-validation/