如何将PHP preg_match用于包含句点的电子邮件?

时间:2012-12-12 06:17:52

标签: php preg-match email-validation

我正在尝试创建一个用户验证表单来检查电子邮件,并对我的数据库运行它。但是,如果有电子邮件,例如“my.name@domain.com”,它会将其放入数据库中,即使它是重复的条目。

if (preg_match("/^([a-zA-Z0-9z])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {
       //regular expression for email validation
        $Email = $_POST['e-mail'];
    } else {
         $error[] = 'Your EMail Address is invalid  ';
    }

如何更改preg_match以查找其中的句号?顺便说一句,所有注册该网站的用户都会在他们的电子邮件中有一段时间(仅适用于具有相同电子邮件格式的精选人群)。

2 个答案:

答案 0 :(得分:1)

我建议您使用FILTER_VALIDATE_EMAIL php过滤器而不是reqex

if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
    //Valid Email
} else {
    //Invalid Email
}

答案 1 :(得分:1)

您的最低目标是确保电子邮件地址的本地部分至少有一个句点,因为您的特定用例需要这样做。我们可能有点天真并使用

/.*\..*@/

作为主要检查。这将搜索零个或多个任何东西,一个周期,然后零个或多个任何东西,然后是at符号。这将成功确保那里至少有一个点,重要的是它。除非您希望字符串*通过此检查,否则请考虑将+更改为.@。我不确定你期望这段时间,并且不能记住我的头脑是否允许句号作为本地部分的第一个或最后一个字符。

将此与对filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)的调用结合起来实际上检查地址的完整格式。