2012-04-28 67 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电子邮件待用;肯定不是最优雅的解决方案,但可能是最快的一个