使用Regex阻止某些电子邮件提供商


Block certain email providers using Regex

请不要对这个问题投反对票,因为我想要的答案不是别人应该追求的答案。我完全知道这一点,但这不是我的主意,我只需要交付:D

在cakepp中,我的模型中有以下数据条目:

    'email' => array(
        'email' => array(
            'rule' => array('email',false,'(^[a-zA-Z]['w'.-]*[a-zA-Z0-9]@[a-zA-Z0-9]['w'.-]*[a-zA-Z0-9]'.[a-zA-Z][a-zA-Z'.]*[a-zA-Z]$)')
        ),
    )

电子邮件规则是cakephp数据验证中的一个常见函数,第二个和第三个参数是可选的。第三个是正则表达式。我对给定的正则表达式字符串不满意,所以我添加了自己的正则表达式。现在我想排除Gmail、Hotmail和雅虎地址。

如何更改正则表达式,使这些地址产生错误结果?我做不好。

你到底为什么要排除gmail、hotmail和yahoo地址?很多人只有其中一个地址,没有其他地址。这是个坏主意。如果你的目标是特定的"受众",我建议你列出一个允许的域名列表。

不管怎样,这里有一个函数式正则表达式,它比您现有的正则表达式更短。。试试看:

'b['w'.-]+@((?!gmail|googlemail|yahoo|hotmail).)['w'.-]+'.'w{2,4}'b

不要为此使用正则表达式。

正确的解决方案是在@符号处explode()电子邮件地址,然后使用纯字符串比较甚至in_array()来检查域是否被列入黑名单。