【问题标题】:How can I use PHP preg_match for an e-mail that contains a period?如何将 PHP preg_match 用于包含句点的电子邮件?
【发布时间】:2012-11-29 19:31:01
【问题描述】:

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

【问题讨论】:

  • 您应该使用filter_var() 而不是正则表达式
  • 请不要使用正则表达式来验证电子邮件地址。 PHP 有 built in email validationawesome external libraries 可以捕获更多由 RFC 引起的边缘情况。此外,验证电子邮件地址的唯一真正方法是向其发送邮件。最好使用格式验证来保护错字。
  • 知道了。我会做出这样的改变。我通过向用户发送电子邮件来授权用户,但这是为了确保我能够首先做到这一点。谢谢!!!

标签: php preg-match email-validation


【解决方案1】:

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

/.*\..*@/

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多