【问题标题】:college edu email addresses validation with php使用 php 验证大学 edu 电子邮件地址
【发布时间】:2011-11-02 21:35:04
【问题描述】:

我想验证电子邮件地址以确保它们是大学教育地址。最好的方法是什么?我在数据库中有一个大学列表,我为每个大学指定一个 URL,该 URL 应该是该大学用户电子邮件地址的一部分。所以对于哈佛,网址是“harvard.edu”,因为所有哈佛电子邮件地址都将其作为其主机名的一部分。

有没有人可以让我这样做的 PHP 函数?

【问题讨论】:

标签: php validation email


【解决方案1】:

我会先检查电子邮件是否是有效的电子邮件

if(filter_var($email, FILTER_VALIDATE_EMAIL))

如果是我会提取域名

$mailDomain = substr(strrchr($email, "@"), 1);

一旦它被提取出来,我会检查它是否存在于我的基地中

mysql_query("SELECT count(domain_name) from domain where domain_name = ".mysql_real_escape_string($mailDomain));

【讨论】:

    【解决方案2】:

    注意:这只会检查 *.edu 电子邮件地址

    您可以将其简化为仅检查 edu 电子邮件:

    $email = "myemail@uni.edu";
    
    function isEduEmail($email){
      $email = explode(".",$email);
      if($email[count($email)-1] == "edu")
        return true;
      else
        return false;
    }
    
    var_dump(isEduEmail($email)); // echo bool(true)
    

    我意识到对于其他人来说,使用正则表达式会有更好的解决方案,但我对此很垃圾,所以这个 a 解决方案。

    【讨论】:

    • 如果电子邮件以edu.sg 结尾怎么办?
    • sg 只是一个例子,cn, my, jp, tw ...您需要考虑国家顶级域名
    【解决方案3】:

    检查字符串是否以.edu结尾

    <?php
    
    $email = "myemail@uni.edu";
    
    function isEduEmail($email){
      $eLength = strlen($email) - 1;
      $local = substr($email, $eLength - 3, $eLength );
      if($local === '.edu') return true;
      return false;
    }
    
    var_dump(isEduEmail($email)); // echo bool(true)
    
    ?>
    

    演示:http://codepad.org/97LlxPX1

    【讨论】:

    • 这很失败 -- codepad.org/zv7btVJx 国家顶级域名也是必须注意的事情
    • @ajreal -- 我说它会检查.edu 电子邮件地址...而不是uni.edu.sg(顺便说一句,我从未听说过)
    • 是国家TLD,OP之间说他有要比较的域名列表,应该用那个来比较?
    【解决方案4】:

    由于您在 mysql 中有数据,因此这样的示例查询应该可以工作

    $some_email = ... ; // don't forget to sanitize
    $sql = <<<SQL
    select count(*) from tables
    where domain_name = substring_index('{$some_email}', '@', -1);
    SQL;
    
    ... // processing
    // return >=1 is a valid edu email
    

    【讨论】:

      【解决方案5】:

      如果您有域列表,只需检查给定的电子邮件地址是否以“@whitelisted.domain”结尾。您可以使用filter_var() 来验证它是否是一个正确的电子邮件地址,然后使用strpos() 来检查它是否包含正确的域。

      例子:

      $domains = array('test.org', 'fake.com');
      
      $email = 'test@fake.com';
      $email = filter_var($email, FILTER_VALIDATE_EMAIL);
      $email_ok = false;
      foreach ($domains as $d) {
          if (strpos($email, '@' . $d) !== false) {
              $email_ok = true;
              break;
          }
      }
      // $email_ok is true if email's domain is on our whitelist
      var_dump($email, $email_ok);
      

      如果您想通过查询MySQL服务器进行验证,请提取@之后的电子邮件部分并检查它是否在您的列表中。

      【讨论】:

      • 您仍然没有检查它是否有.edu 电子邮件地址
      • “我为每个人指定了一个 url,该 url 应该是该大学用户电子邮件地址的一部分。所以对于哈佛,url 是“harvard.edu” 所以@ 987654326@ 是白名单地址部分的一部分(这很好,因为不是每个大学都可能有一个带有 .edu TLD 的地址)。
      【解决方案6】:

      类似的东西(希望你明白)

      我不确定这是否是有效的代码,因为没有测试就写了:

      <?php
      
      $usersEmail1 = "i.am@harvard.edu";
      
      $email1Exploded = explode("@", $usersEmail1);
      if (sizeof($email1Exploded) == 2) {
        $domain1 = trim($email1Exploded[1]);
        $result = mysql_query("SELECT * from valid_domains WHERE url LIKE '%" . mysql_real_escape_string($domain1) . "' LIMIT 1");
        if (!empty(mysql_num_rows($result))) {
          //Valid email
        } else {
          //Invalid email
        }
      } else {
        //not valid email
      }
      
      
      ?>
      

      【讨论】:

        【解决方案7】:

        单行:

        function isEduEmail($sEmail) {
            return (substr($sEmail, strrpos($sEmail, ".")+1) == "edu");
        }
        

        【讨论】:

        • 让我们说电子邮件中有.?喜欢my.name@something.edu
        • 它使用 strrpos,它检查最后一个点。最后一个点应该始终是 .edu。如果不是 - 该函数将返回 false。因此可以正常工作。
        【解决方案8】:
        $email="bob@harvard.edu";
        $lthree=substr($email,-3);
        $edu=false;
        if ($lthree=="edu") $edu=true;
        

        现在如果 $edu 为真,那么电子邮件就是 edu 电子邮件。

        【讨论】:

          猜你喜欢
          • 2016-10-24
          • 2011-01-31
          • 2012-01-30
          • 2010-10-11
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 2011-04-19
          • 1970-01-01
          相关资源
          最近更新 更多