2011-07-01 73 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