我正在尝试检测用户的电子邮件是Hotmail还是实时地址,如果是,则回显错误。
这是我尝试过的:
if ((preg_match('[a-zA-Z0-9_\.+]+@(live|hotmail)(\.[a-z]{2,3}){1,2}'))){
echo "We do not accept hotmail and live";
}
这是行不通的。我做错了什么?
看到您的唯一目的是检查电子邮件是用于实时邮件还是热门邮件,这不值得使正则表达式复杂化,只需执行以下操作:
- 更新 -
正如上面的评论所指出的那样,你错过了preg_match()
的第二个参数
if (preg_match('/(.*)@(live|hotmail)\.(.*)/', $emailVariable) != false) {
echo "Get a real email provider";
}
由于您只想检查@live
或@hotmail
,忽略tld和电子邮件的第一部分是安全的。演示:http://rubular.com/r/TUlTUxmcQB
*注意:我正在使用!=
,因为preg_match()可以返回0
,在这种情况下,0匹配,而false将等同于相同的结果。*
我使用了另一种方法,尝试检测目标域的MX,因为托管交换将导致类似hotmail的问题(例如,通过hotmail的服务器静默删除已经被“250 ok”接受的邮件):
function isHotmailAddress($email) {
$domain = substr(strrchr($email, '@'), 1);
$mxs = array();
getmxrr($domain, $mxs);
$hotmailMxs = preg_grep('/(hotmail|outlook)\.com$/', $mxs);
return (count($hotmailMxs) > 0);
}