php根据域名验证电子邮件地址

时间:2011-02-27 23:00:06

标签: php regex if-statement

我需要根据域名过滤一些电子邮件地址: 基本上,如果域名是yahoo-inc.com,facebook.com,baboo.com ..(以及其他一些),该功能应该做一些事情,如果域名不同,它应该做其他事情。  我知道这样做的唯一方法是使用带有preg_match_all的模式/正则表达式,并为每个balcklisted域创建案例/条件(例如,如果domain = yahoo-inc)执行此elseif(domain == facebook.com)执行此操作。等等但是我需要知道是否有更简单/更简洁的方法来包含我想要在单个变量/数组中过滤的所有域,然后仅应用2个条件(例如,如果电子邮件在黑名单中{做某事}别的{做别的事情}

3 个答案:

答案 0 :(得分:2)

提取域部分(即最后一个'@'之后的所有内容),然后使用in_array检查它是否在您的黑名单中:

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

答案 1 :(得分: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
}

答案 2 :(得分:1)

这里有一个非常简单的方法,VALID电子邮件地址应该只包含一个@符号,所以只要验证你就可以通过@爆炸字符串并收集第二部分。

示例:

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