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

如何将PHP preg_match用于包含句点的电子邮件?,php,preg-match,email-validation,Php,Preg Match,Email Validation,我正在尝试创建一个用户验证表单来检查电子邮件,并对我的数据库运行它。但是,如果有电子邮件,例如“我的”。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

我正在尝试创建一个用户验证表单来检查电子邮件,并对我的数据库运行它。但是,如果有电子邮件,例如“我的”。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来寻找其中的时段?顺便说一句,所有注册该网站的用户的电子邮件中都会有一个句号(仅适用于具有相同电子邮件格式的特定人群)。

我建议您使用
过滤器\u验证\u电子邮件
php过滤器,而不是
reqex

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

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

/.*\..*@/
作为主要的检查。它搜索零个或多个元素,一个周期,然后搜索零个或多个元素,然后搜索at符号。这将成功地确保至少有一个点在那里,它的问题。考虑将<代码> *>代码> s改为<代码> +>代码> s,除非您希望字符串<代码> .@ /代码>通过此检查。我不确定你期望句点在哪里,我也记不清是否允许句点作为本地部分的第一个或最后一个字符


结合调用
filter\u var($\u POST['e-mail'],filter\u VALIDATE\u EMAIL)
来实际检查地址的完整格式。

您应该使用而不是正则表达式来验证电子邮件地址。PHP已经捕获了更多由RFC引起的边缘情况。此外,验证电子邮件地址的唯一真正方法是向其发送邮件。最好使用格式验证来保护打字错误。明白了。我会改变的。我通过向它发送电子邮件来授权用户,但这是一种检查,以确保我能够首先这样做。谢谢