如何检测用户电子邮件是否为Hotmail并使用RegEx进行实时生活

时间:2013-12-17 18:49:06

标签: php regex

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

以下是我的尝试:

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

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

3 个答案:

答案 0 :(得分:5)

将您的电子邮件用于直播 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将等同于相同的结果*

答案 1 :(得分:1)

试试这个正则表达式......

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

这是一个演示: DEMO

答案 2 :(得分:1)

我使用了另一种方法,尝试检测目标域的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);
}