可能重复:
What is the best regular expression for validating email addresses?
Is there a php library for email address validation?
在我的注册表单上,用户将添加他的电子邮件,然后收到一封电子邮件以验证他的帐户。但是,我想要一个简单的电子邮件验证,我想知道以下是否合适。
<?php
$email = "someone@example.com";
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "Valid email address.";
}
else {
echo "Invalid email address.";
}
?>
答案 0 :(得分:24)
尝试:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'Valid';
} else {
echo 'Invalid';
}
答案 1 :(得分:7)
您的正则表达式不必要地禁止子域名,例如user@unit.company.com
。此外,您不应使用deprecated eregi
。
使用filter_var
:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Valid email address.";
} else {
echo "Invalid email address.";
}
答案 2 :(得分:2)
除正则表达式外,您还可以使用filter_var
:
if (filter_var('someone@example.com', FILTER_VALIDATE_EMAIL)) === false)
{
echo "Invalid email address.";
}
答案 3 :(得分:0)
电子邮件验证有点棘手,因为RFC that specifies the format of email addresses比人们想象的更加不受限制。例如,以下是所有有效的电子邮件地址:
用于电子邮件验证的正确正则表达式看起来像this,我甚至不会尝试查看;)但是,在使用PHP时,您应该真正使用filter_var(),就像这样:
$valid = filter_var($email, FILTER_VALIDATE_EMAIL);
# $valid will be TRUE if the email address was valid,
# otherwise FALSE.
RFC822似乎包含原始的电子邮件格式规范,但我认为2822(如上所述)只是对原始RFC的修订/修订。