我看到的一些 cmets 与我的测试不匹配,所以我想指出我在 PHP 5.x 中发现的功能。如果您首先清理电子邮件,它将删除您不想要的所有字符,然后您可以验证。我有两个功能,以防有人只想做一个或另一个。
检查电子邮件是否有效:
function isValidEmailAddress($email = '', $check_domain = false)
{
if (empty($email)) {
return false;
} else {
$success = true;
}
if (!filter_var((string) $email, FILTER_VALIDATE_EMAIL)) {
$success = false;
}
if ($check_domain && $success) {
list($name, $domain) = explode('@', trim($email) . "@");
if (!checkdnsrr($domain, 'MX')) {
$success = false;
}
}
return array("success" => $success, "email" => $email);
}
删除和UTF8等:
function sanitizeEmailAddress($email = '') {
if (!empty($email)) {
$email = filter_var(strtolower(trim($email)), FILTER_SANITIZE_EMAIL);
}
return $email;
}
示例用法:
// test --
$list = array('goodÂ@bad.com', 'mikeq@google.com', 'puser@porsche.us', 'quick@us', '', '<yo@marist.edu>', 'hello@us.edu', 'rgil@yahoo.com', 'abc@2r.edu', 'one2@e3.edu', 'key@gen.us');
foreach($list as $email) {
$ret = isValidEmailAddress( sanitizeEmailAddress($email), false );
if ($ret['success']) {
echo "GOOD " . $ret['email'];
} else {
echo "BAD " .$email;
}
echo "\n";
}
结果:
GOOD good@bad.com
GOOD mikeq@google.com
GOOD puser@porsche.us
BAD quick@us
BAD
GOOD yo@marist.edu
GOOD hello@us.edu
GOOD rgil@yahoo.com
GOOD abc@2r.edu
GOOD one2@e3.edu
GOOD key@gen.us
如果您使用域选项:$ret = isValidEmailAddress(sanitizeEmailAddress($email), true);
GOOD good@bad.com
GOOD mikeq@google.com
GOOD puser@porsche.us
BAD quick@us
BAD
GOOD yo@marist.edu
GOOD hello@us.edu
GOOD rgil@yahoo.com
BAD abc@2r.edu
BAD one2@e3.edu
BAD key@gen.us