如何使用RegEx检测用户电子邮件是否是hotmail和live


How to detect if user email is hotmail and live using RegEx

我正在尝试检测用户的电子邮件是热邮件还是实时地址,如果是,则返回错误。

以下是我尝试过的:

if ((preg_match('[a-zA-Z0-9_'.+]+@(live|hotmail)('.[a-z]{2,3}){1,2}'))){
    echo "We do not accept hotmail and live";
}

它不起作用。我做错了什么?

由于您的唯一目的是检查电子邮件是针对live还是hotmail的,因此不值得过度复杂化正则表达式,只需执行以下操作即可:

-更新--

正如上面的评论所指出的,您已经错过了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将等同于相同的结果。*

请改用此regex。。。

[a-zA-Z0-9_'.+]+@(live|hotmail)('.com)

这里有一个演示:demo

我使用了另一种方法,试图检测目标域的MXe,因为托管交换会导致类似的问题,如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);
}