使用正则表达式进行简单的电子邮件验证

时间:2011-09-01 17:12:52

标签: php preg-match

  

可能重复:
  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.";
}
?>

4 个答案:

答案 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比人们想象的更加不受限制。例如,以下是所有有效的电子邮件地址:

  • “ABC \ @def” @ example.com
  • “Fred Bloggs”@ example.com
  • “乔\吹” @ example.com
  • “ABC DEF @” @ example.com
  • customer/department=shipping@example.com
  • $A12345@example.com
  • !def!xyz%abc@example.com
  • _somename@example.com

用于电子邮件验证的正确正则表达式看起来像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的修订/修订。