2012-04-28 70 views
0

我在做什麼:
試圖減少要在我的網站中註冊的垃圾郵件散發者。包含點的地方部分的電子郵件驗證

我知道:
點是在Gmail中忽略,你可以把圓點無處不在的電子郵件地址的localpart但@之前的第一位置和最後的。

問題:
當與[email protected]該網站的用戶註冊,寄託都正常,但出現問題的時候,他可以用[email protected]重新登記等等。

我所做的是:
刪除電子郵件中的本地部分的任何點,但我意識到,用戶不能用,他只是進入了他的電子郵件地址,提交。

我想要的是:
有沒有辦法解決這個問題?因爲在這種情況下,人們可以通過更改電子郵件地址中的點位置來註冊很多次。

回答

5

我相信你現在已經找到了解決辦法,但爲了完整起見...

基本上你需要存儲的本地部分爲是,不剝點了,後來帶比較時,應用程序和註冊表中的點都會出現。像:

$registered_emails[0]="[email protected]"; //This is just to show how it was registered first time 
$application_email="[email protected]"; //New application email 

$discard=0; //flag for discarding application 
if (preg_match("/@gmail.com$/i", $application_email)===1) { 
    $app_em=str_replace(".", "", $application_email); 
    foreach ($registered_emails as $reg_em) 
     if ($app_em==str_replace(".", "", $reg_em)) { 
     // "[email protected]"=="[email protected]" 
     $discard=1; // discard application 
     break; 
     } 
     //can't use an "else" clause here to break, as you need to loop through all registries 
} 
if ($discard==1) 
    echo "discard application"; 
else 
    array_push($registered_emails, $application_email); //register $application_email as is ([email protected]) 

也許它可能是值得之前過濾掉列表中的所有Gmail裏的郵件,甚至存儲所有的Gmail電子郵件待用;肯定不是最優雅的解決方案,但可能是最快的一個