2011-08-24 61 views
2

我想驗證電子郵件地址,以確保他們是大學edu地址。什麼是最好的方式來做到這一點?我有一個數據庫中的學院列表,併爲每一個我指定一個網址,應該是該學院的用戶的電子郵件地址的一部分。所以哈佛大學的網址是「harvard.edu」,因爲所有的哈佛電子郵件地址都將其作爲主機名的一部分。大學教育電子郵件地址驗證與PHP

有沒有人有一個PHP函數,將允許我這樣做?

+0

你的意思是域名? – SLaks

+0

可能的重複:[如何在PHP中驗證電子郵件?](http://stackoverflow.com/questions/5855811/how-to-validate-an-email-in-php) – hakre

回答

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

注:這隻會檢查* .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

0

檢查是否在字符串中結束.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

0

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

單內襯之一:

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

讓我們說在電子郵件中有一個'.'像'my.name @ something.edu' – Neal

+1

它使用strrpos,它檢查最後一個點。最後一個點應該總是.edu。如果不是 - 該函數將返回false。因此應該如此工作。 –

0

如果您有域名列表,請檢查給定的電子郵件地址是否以「@ 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

0

像這樣的東西(希望你的想法)

我不知道這是否是有效的代碼,因爲沒有測試寫道:

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


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

現在,如果$ EDU是真實的,那麼該電子郵件是edu的電子郵件。