0

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

4

2 回答 2

1

我建议你使用FILTER_VALIDATE_EMAILphp 过滤器而不是reqex

if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
    //Valid Email
} else {
    //Invalid Email
}
于 2012-12-12T06:22:26.400 回答
1

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

/.*\..*@/

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

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

于 2012-12-12T06:24:44.147 回答