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