【问题标题】:php validate email address based on the domain namephp 根据域名验证电子邮件地址
【发布时间】:2011-07-05 10:24:26
【问题描述】:

我需要根据域名过滤一些电子邮件地址: 基本上,如果域名是 yahoo-inc.com、facebook.com、baboo.com ..(以及其他一些),该功能应该做一些事情,如果域不同,它应该做其他事情。 我知道这样做的唯一方法是使用带有 preg_match_all 的模式/正则表达式并为每个列入黑名单的域创建案例/条件(例如,如果域 = yahoo-inc)这样做 elseif(域 == facebook.com)这样做.. . 等,但我需要知道是否有更简单/简洁的方法将我想要过滤的所有域包含在单个变量/数组中,然后仅应用 2 个条件(例如,如果电子邮件在黑名单中 {做某事} else {做其他事情}

【问题讨论】:

    标签: php regex if-statement


    【解决方案1】:

    提取域部分(即最后一个'@'之后的所有内容),将其小写,然后使用in_array 检查它是否在您的黑名单中:

    $blacklist = array('yahoo-inc.com', 'facebook.com', ...);
    if (in_array($domain, $blacklist)) {
        // bad domain
    } else {
        // good domain
    }
    

    【讨论】:

      【解决方案2】:

      在此处添加到 @Alnitak 是完成所需操作的完整代码

      $domain = explode("@", $emailAddress);
      $domain = $domain[(count($domain)-1)];
      $blacklist = array('yahoo-inc.com', 'facebook.com', ...);
      if (in_array($domain, $blacklist)) {
          // bad domain
      } else {
          // good domain
      }
      

      【讨论】:

      • 从技术上讲,您应该取$domain 的最后一个元素,但不能保证是[1]"A@B"@C 是合法的电子邮件地址。
      【解决方案3】:

      这是一个非常简单的方法,一个有效的电子邮件地址应该只包含一个 @ 符号,所以只要它验证你可以通过 @ 分解字符串并收集第二段。

      例子:

      if (filter_var($user_email, FILTER_VALIDATE_EMAIL))
      {
          //Valid Email:
          $parts = explode("@",$user_email);
      
          /*
               * You may want to use in_array if you already have a compiled array
               * The switch statement is mainly used to show visually the check.
          */
          switch(strtolower($parts[1]))
          {
               case 'facebook.com':
               case 'gmail.com':
               case 'googlemail.com':
                   //Do Something
               break;
               default:
                   //Do something else
               break;
          }
      }
      

      【讨论】:

      • 这需要为每个列入黑名单的域提供一个案例,最好将所有列入黑名单的域存储在一个数组中,然后使用 in_array 进行比较。
      猜你喜欢
      • 2013-12-20
      • 2014-03-19
      • 2017-11-02
      • 2012-03-07
      • 2011-06-14
      • 2013-03-10
      • 2011-04-19
      • 2014-06-12
      • 1970-01-01
      相关资源
      最近更新 更多