大学教育电子邮件地址验证与PHP

问题描述:

我想验证电子邮件地址,以确保他们是大学edu地址。什么是最好的方式来做到这一点?我有一个数据库中的学院列表,并为每一个我指定一个网址,应该是该学院的用户的电子邮件地址的一部分。所以哈佛大学的网址是“harvard.edu”,因为所有的哈佛电子邮件地址都将其作为主机名的一部分。大学教育电子邮件地址验证与PHP

有没有人有一个PHP函数,将允许我这样做?

+0

你的意思是域名? – SLaks

+0

可能的重复:[如何在PHP中验证电子邮件?](http://*.com/questions/5855811/how-to-validate-an-email-in-php) – hakre

我会首先检查电子邮件是一个有效的电子邮件

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)); 

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

您可以简化它只是检查EDU电子邮件:

$email = "[email protected]"; 

function isEduEmail($email){ 
    $email = explode(".",$email); 
    if($email[count($email)-1] == "edu") 
    return true; 
    else 
    return false; 
} 

var_dump(isEduEmail($email)); // echo bool(true) 

我知道别人会有使用正则表达式更好的解决方案,但我很垃圾,所以这一个解决方案。

+0

如果电子邮件以'edu.sg'? – ajreal

+0

'sg'只是一个例子,'cn,my,jp,tw' ...你需要考虑的国家*域名 – ajreal

+0

哦,什么是.ac代表什么? – ajreal

检查是否在字符串中结束.edu

<?php 

$email = "[email protected]"; 

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) 

?> 

DEMO:http://codepad.org/97LlxPX1

+0

这个失败严重 - http://codepad.org/zv7btVJx国家*域名必须小心 – ajreal

+0

@ajreal - 我说它检查'.edu'电子邮件地址...不是'uni.edu.sg '(我从来没有听说过btw) – Neal

+0

是国家TLD,OP之间说他有域名比较的名单,应该用来比较一下吗? – ajreal

既然你已经在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 

单内衬之一:

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

让我们说在电子邮件中有一个'.'像'my.name @ something.edu' – Neal

+1

它使用strrpos,它检查最后一个点。最后一个点应该总是.edu。如果不是 - 该函数将返回false。因此应该如此工作。 –

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

例子:

$domains = array('test.org', 'fake.com'); 

$email = '[email protected]'; 
$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服务器做验证,@后提取电子邮件的一部分,并检查它是否是你的名单上。

+0

你仍然没有检查它是否有'.edu'电子邮件地址 – Neal

+0

_“,因为我指定了一个url,该url应该是该学院用户的电子邮件地址的一部分,因此对于harvard,URL是”harvard.edu “_ 因此'.edu'是白名单地址部分的一部分(这很好,因为不是每个大学都可能有.edu*域名的地址) – Crack

+0

ahhh ok然后,明白了。 – Neal

像这样的东西(希望你的想法)

我不知道这是否是有效的代码,因为没有测试写道:

<?php 

$usersEmail1 = "[email protected]"; 

$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 
} 


?> 

$email="[email protected]"; 
$lthree=substr($email,-3); 
$edu=false; 
if ($lthree=="edu") $edu=true; 

现在,如果$ EDU是真实的,那么该电子邮件是edu的电子邮件。