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

Php 使用Regex阻止某些电子邮件提供商,php,regex,cakephp,email-validation,Php,Regex,Cakephp,Email Validation,请不要对这个问题投反对票,因为我要的答案不是一个有人应该追求的答案。我很清楚这一点,但这不是我的主意,我只需要交付:D 在cakephp中,我的模型中有以下数据项: '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

请不要对这个问题投反对票,因为我要的答案不是一个有人应该追求的答案。我很清楚这一点,但这不是我的主意,我只需要交付:D

在cakephp中,我的模型中有以下数据项:

    '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和yahoo地址


如何更改正则表达式以使这些地址产生false结果?我弄不好。

不要用正则表达式


正确的解决方案是在@符号处分解电子邮件地址,然后使用纯字符串比较,甚至在_数组中检查该域是否被列入黑名单。

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

无论如何,这里有一个函数正则表达式,它比你已经有的要短。。试一试:

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

你为什么想激怒用户?好吧,好问题:我不想,这让我心碎。只是想要这个东西的人认为它过滤掉了那些只想看一下他的工具的人,而不是留下一封真正的电子邮件来识别他们。只是一个提示:我很确定你可以有一个比你的正则表达式匹配的更有趣的电子邮件地址。然后创建一个验证系统来允许访问。无论他们提供什么样的电子邮件地址,发送一封带有他们必须单击的链接的电子邮件,以允许他们访问。一旦他们点击链接,总是允许该电子邮件地址访问。告诉你的客户,如果他们不能使用真实的邮件地址,他们将开始使用一次性邮件地址。事实上,只要看一眼,我还是会使用这样的电子邮件地址。但这可能吗?我从来没有这样做过,但我想使用cakephp提供给我的工具,而不是添加我自己的函数。这样我可以保持我的模型干净,所以我希望它可以在任何PHP框架中工作。完全同意,但客户希望这样:所以我只想知道它是否可行。我的正则表达式只到目前为止…这就成功了Serrghi。。。谢谢我非常抱歉,为了得到我的答案,我把你拖入地狱:没有问题:如果你把我的答案标记为被接受的答案,那就太感谢了