Gordonmac Dot Com

Mostly a web development blog

Validating e-mail addresses in PHP

Posted: November 17th, 2011 | Tags: | Posted in: PHP, Tutorials
Note: This tutorial was originally published in 2011. The tips and techniques explained may be outdated.

This is easily the best function I’ve used for validating e-mail addresses in my PHP scripts and applications.

function is_valid_email($email)
{
	$qtext = '[^\x0d\x22\x5c\x80-\xff]';
	$dtext = '[^\x0d\x5b-\x5d\x80-\xff]';
	$atom = '[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+';
	$quoted_pair = '\x5c[\x00-\x7f]';
	$domain_literal = "\x5b($dtext|$quoted_pair)*\x5d";
	$quoted_string = "\x22($qtext|$quoted_pair)*\x22";
	$domain_ref = $atom;
	$sub_domain = "($domain_ref|$domain_literal)";
	$word = "($atom|$quoted_string)";
	$domain = "$sub_domain(\x2e$sub_domain)*";
	$local_part = "$word(\x2e$word)*";
	$addr_spec = "$local_part\x40$domain";
	return preg_match("!^$addr_spec$!", $email) ? true : false;
}

Use it as follows:

if((isset($_POST['email']) && !empty($_POST['email']))
{
    if(is_valid_email($_POST['email']))
    {
	    $email = $_POST['email'];
    } else {
    	$errors['email'] = 'Please provide a valid e-mail address.';
    }
} else {
    $errors['email'] = 'Please provide your e-mail address.';
}