2011-07-01 40 views
1

请不要downvote这个问题,因为这个事实,我寻找的答案不是一个人应该追求的anser。我充分意识到这一点,但它不是我的主意,我只是必须提供:d使用正则表达式阻止某些电子邮件提供商

在CakePHP中,我已经在我的模型下面的DataEntry:

'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作为结果?我无法正确理解。

+0

你为什么要走开的用户? – ThiefMaster

+1

很好的问题:我没有,它打破了我的心。只是想要这个东西的人认为它会过滤掉那些只想看看他的工具的人,而不会留下真正的电子邮件来识别他们。 –

+2

只是一个提示:我敢肯定,你可以有一个更有趣的*电子邮件地址比你的正则表达式匹配。 – Piskvor

回答

5

为什么要排除gmail,hotmail和yahoo地址?有很多人只有这些地址之一,没有其他人。这是一个坏主意。如果你是针对特定的“观众”,我建议制作一个允许的域名列表。

不管怎么说,这是给你的功能正则表达式比你已经有一个较短的..尝试一下:

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

完全同意,但客户希望这样:)所以我只是想知道是否有可能。我的正则表达式到目前为止... –

+0

我最近的编辑应该做的伎俩..(我觉得很肮脏..:D) – tskulbru

+0

这就是Trick Serrghi ......谢谢!林非常抱歉拖你通过地狱得到我的答案:D –

2

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

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

+0

但是有可能吗?我从来没有这样做过,但我想用cakephp给我的工具,而不是添加我自己的功能。这样我可以保持我的模型清洁。 –

+0

[爆炸是PHP中的内置函数](http://php.net/manual/en/function.explode.php),所以它应该在任何PHP框架中工作,我应该希望。 – ewall