2011-02-27 67 views
1

我需要根據域名過濾一些電子郵件地址: 基本上,如果域名是yahoo-inc.com,facebook.com,baboo.com ..(和a其他幾個)函數應該做些什麼,如果域不同,它應該做別的。 我知道這樣做的唯一方法是使用帶preg_match_all的模式/正則表達式,併爲每個balcklisted域(例如,如果domain = yahoo-inc)創建案例/條件,請執行此elseif(domain == facebook.com)。 ..等,但我需要知道是否有一個更簡單/ concis的方式,包括我想過濾在一個單一的變量/數組的所有域,然後只應用2個條件(例如,如果電子郵件在黑名單{做一些事情}其他{做別的事情}php驗證基於域名的電子郵件地址

回答

2

提取域部分(即一切後,最後一個「@」),向下的情況下,然後用in_array來檢查它是否在黑名單:

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

非常感謝! in_array是神奇功能 – Michael 2011-02-27 23:12:58

1

好這是一個非常簡單的方法做到這一點,有效的電子郵件地址應該只包含一個@符號,只要驗證您可以通過@爆炸字符串並收集第二個段。

例子:

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; 
    } 
} 
+0

這將需要每個列入黑名單的域的情況下,最好將所有列入黑名單的域存儲在一個數組中,然後使用in_array進行比較。 – Ajay 2011-02-27 23:08:59

+0

在代碼中閱讀我的評論。 – RobertPitt 2011-02-27 23:09:39

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 
} 
+0

從技術上講,你應該採用'$ domain'的最後一個元素,但不能保證是'[1]'。 ''A @ B「@ C'是合法的電子郵件地址。 – Alnitak 2011-02-27 23:22:50

+0

你是正確的,已編輯。 – Ajay 2011-02-27 23:28:17