以注册形式从电子邮件域中提取大学名称

时间:2011-08-10 17:43:26

标签: php mysql database whois

假设我有一个注册表单,其中包含仅针对大学edu电子邮件地址设置的电子邮件验证。

使用PHP将大学名称插入数据库的最佳方法是什么?

我能想到的唯一方法就是使用if.edude地址,然后是name = college。但是有成千上万的大学,这似乎并不高效。

3 个答案:

答案 0 :(得分:1)

获取包含电子邮件值的字符串并将其拆分为“@”,然后拆分为“。”。如果结果数组的第三个对象等于edu,则将数组的第二个对象添加到数据库中。

这对您有用还是我误解了您的询问?

答案 1 :(得分:1)

我不熟悉.edu顶级域名,但我认为注册人必须在其whois记录中提供有效信息,因此定期搜索isis可能是一个起点。例如,http://whois.domaintools.com/stanford.edu显示:

Domain Name: STANFORD.EDU

Registrant:
   Stanford University
   The Board of Trustees of the Leland Stanford Junior University
   241 Panama Street, Pine Hall, Room 115
   Stanford, CA 94305-4122
   UNITED STATES

当然,问题是找到一个接受自动查询的搜索服务提供商。

答案 2 :(得分:0)

尝试此功能:

function getDomainParts($email) { 
    $posDom = strrpos($email, "@");
    $posTLD = strrpos($email, ".");
    return array( 
        "tld" => substr($email, $posTLD+1),
        "domain" => substr($email, $posDom+1, $posTLD-$posDom-1)
    );
}

$tests = array(
    "test1@college.edu",
    "test2@bobstruckingacademy.edu", 
    "test3@test.com"
);

foreach($tests as $k => $v) {
    $temp = getDomainParts($v);
    if($temp['tld'] == "edu") 
        echo("College: " . $temp['domain'] . "<br>");
    else
        echo("Not Edu Address: " . $v . " (" . $temp['tld'] . ")<br>");
}

输出:

  

学院:大学

     

College:bobstruckingacademy

     

不是Edu地址:test3@test.com(com)

我明白这可能不会让你得到你所要求的。如果我输入密歇根州立大学(作为一个例子),那是否意味着密苏里州?密西西比州?密歇根州?如果没有查找数组或某种表格,“msu”就像您的注册表格一样好。

或者,你可以提供一个包含所有大学的下拉菜单并让用户选择一个,但是你仍然可以输入所有的大学名字。

修改

此链接可以为您提供帮助:List of edu Domains