function validEmail($email) { $isValid = true; $atIndex = strrpos ( $email, "@" ); if (is_bool ( $atIndex ) && ! $atIndex) { $isValid = false; } else { $domain = substr ( $email, $atIndex + 1 ); $local = substr ( $email, 0, $atIndex ); $localLen = strlen ( $local ); $domainLen = strlen ( $domain ); if ($localLen < 1 || $localLen > 64) { // local part length exceeded $isValid = false; } else if ($domainLen < 1 || $domainLen > 255) { // domain part length exceeded $isValid = false; } else if ($local [0] == '.' || $local [$localLen - 1] == '.') { // local part starts or ends with '.' $isValid = false; } else if (preg_match ( '/\\.\\./', $local )) { // local part has two consecutive dots $isValid = false; } else if (! preg_match ( '/^[A-Za-z0-9\\-\\.]+$/', $domain )) { // character not valid in domain part $isValid = false; } else if (preg_match ( '/\\.\\./', $domain )) { // domain part has two consecutive dots $isValid = false; } else if (! preg_match ( '/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace ( "\\\\", "", $local ) )) { // character not valid in local part unless // local part is quoted if (! preg_match ( '/^"(\\\\"|[^"])+"$/', str_replace ( "\\\\", "", $local ) )) { $isValid = false; } } //5.3.0 This function is now available on Windows platforms. if ($isValid && ! (checkdnsrr ( $domain, "MX" ) || checkdnsrr ( $domain, "A" ))) { // domain not found in DNS $isValid = false; } } return $isValid; }