【问题标题】:Block certain email providers using Regex使用正则表达式阻止某些电子邮件提供商
【发布时间】:2011-09-26 18:04:39
【问题描述】:

请不要对这个问题投反对票,因为我正在寻找的答案不是某人应该追求的答案。我完全意识到这一点,但这不是我的主意,我只需要交付: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]$)')
        ),
    )

email规则是cakephp数据校验中常用的功能,第二个和第三个参数是可选的。第三个是正则表达式。我对给定的正则表达式字符串不满意,所以我添加了自己的。现在我想排除 Gmail、Hotmail 和 yahoo 地址。

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

【问题讨论】:

  • 为什么要惹怒用户?
  • 很好的问题:我不这样做,这让我心碎。只是想要这个东西的人认为它过滤掉了只想看看他的工具而不留下真正的电子邮件来识别他们的人。
  • 只是一个提示:我很确定您可以拥有一个比您的正则表达式匹配的更有趣的电子邮件地址。
  • 然后创建一个验证系统以允许访问。无论他们提供什么电子邮件地址,都可以发送一封电子邮件,其中包含他们必须单击的链接才能获得访问权限。一旦他们点击链接,请始终允许该电子邮件地址访问。
  • 告诉您的客户,如果他们不能使用真实的邮件地址,他们就会开始使用一次性邮件地址。实际上,为了“看看”,无论如何我都会使用这样的电子邮件地址。

标签: php regex cakephp email-validation


【解决方案1】:

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

无论如何,这是一个比你已有的更短的功能正则表达式。试试看:

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

【讨论】:

  • 完全同意,但客户希望这样 :) 所以我只想知道这是否可能。我的正则表达式只到现在...
  • 这成功了 Serrghi...谢谢!我非常抱歉拖着你穿过地狱得到我的答案:D
  • 没问题 :) 如果您将我的答案标记为已接受的答案,那就太感谢了! :)
【解决方案2】:

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

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

【讨论】:

  • 但这可能吗?我永远不会这样做,但我想使用 cakephp 给我的工具,而不是添加我自己的函数。这样我可以保持模型干净。
  • explode is a built-in function in PHP,所以我希望它可以在任何 PHP 框架中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 2011-10-30
  • 2018-12-04
  • 1970-01-01
  • 2018-02-26
相关资源
最近更新 更多