Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用RegEx检测用户电子邮件是否为hotmail和live_Php_Regex - Fatal编程技术网

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

Php 如何使用RegEx检测用户电子邮件是否为hotmail和live,php,regex,Php,Regex,我试图检测用户的电子邮件是hotmail还是live地址,如果是,则回显错误 以下是我尝试过的: if ((preg_match('[a-zA-Z0-9_\.+]+@(live|hotmail)(\.[a-z]{2,3}){1,2}'))){ echo "We do not accept hotmail and live"; } 它不起作用。我做错了什么?试试这个正则表达式 [a-zA-Z0-9_\.+]+@(live|hotmail)(\.com) 这里有一个演示:鉴于您的唯一目的

我试图检测用户的电子邮件是hotmail还是live地址,如果是,则回显错误

以下是我尝试过的:

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

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

试试这个正则表达式

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

这里有一个演示:

鉴于您的唯一目的是检查电子邮件是否用于livehotmail,因此不必过分复杂化正则表达式,只需执行以下操作:

--更新--

正如上面的评论所指出的,您错过了
preg\u match()

由于您只想检查
@live
@hotmail
,因此可以安全地忽略tld和电子邮件的第一部分。演示:


*注意:我正在使用
=
因为preg_match()可以返回
0
,在本例中,0个匹配项和false将等同于相同的结果。*

我使用了另一种方法,尝试检测目标域的MXE,因为托管exchange将导致类似的问题,如hotmail(例如,无声地丢弃已被“250 ok”接受的邮件)通过hotmail的服务器):


如果您知道字符串是一个电子邮件地址,为什么不使用strpos呢?您可以通过将strstrstr与'@live'或'@hotmail'一起使用来简化。我不知道如何使用。你能给我举个例子吗?考虑到有多少免费的电子邮件主机阻止2似乎有点没有意义。。你忘记了preg_match中的第二个参数..因为hotmail可以像.com.br一样。我更喜欢使用
[a-zA-Z0-9\.+]+@(实时hotmail)(\[a-z]{2,3}{1,2}
@Luciannascimento这不是真的必要。因为测试到.com就足够了,所以添加到末尾的任何扩展(如.br)都是任意的。你可以在我链接的演示中尝试自己。com.br电子邮件仍在接收中。演示站点不错,尽管不需要检查第一部分或扩展部分。@ollieread这是一个很好的观点。。。实际上我正在编辑我的答案,但是停下来回复另一条评论哈哈。不过有一个因素。Hotmail和Live都有可用的
.ca
电子邮件地址@Charlie74在你的演示中没有被拾取。这一个拾取了
.ca
Hotmail和实时电子邮件,非常好:)它现在可以工作了:如果((preg_match(/^(.*)\@(Live | Hotmail)\.(.*)/,$POST['user_email')){echo“我们不接受Hotmail和Live”}使用我添加的代码,但是很明显,将$emailVariable替换为包含您希望验证的电子邮件的变量。我编辑了您的帖子以整理它,并删除了\@中的\项。你不必逃避它。干杯,我需要记得编辑后整理一下。这很好用。谢谢我很惊讶我是第一个投票的人。这对于防止用户使用hotmail注册要好得多。
if (preg_match('/(.*)@(live|hotmail)\.(.*)/', $emailVariable) != false) {
    echo "Get a real email provider";
}
function isHotmailAddress($email) {
    $domain = substr(strrchr($email, '@'), 1);

    $mxs = array();
    getmxrr($domain, $mxs);

    $hotmailMxs = preg_grep('/(hotmail|outlook)\.com$/', $mxs);
    return (count($hotmailMxs) > 0);
}