包含dot的localpart的电子邮件验证

ALH*_*ALH 0 email registration duplicates

我在做什么:
试图减少想要在我的网站注册的垃圾邮件发送者.

我知道:
在Gmail中忽略了Dot,你可以在电子邮件地址的本地部分的任何地方加点,但是第一个位置和@之前的最后一个位置.

问题:
当用户使用ex.ample@gmail.com在网站上注册时,可以正常使用,但是当他可以在网站上再次注册ex.am.pl.e@gmail.com等时会出现问题.

我所做的是:
删除电子邮件本地部分的任何点,但我意识到用户无法提交他刚刚输入的电子邮件地址.

我想要的是:
有没有办法克服这个问题?因为这种情况,一个人可以通过更改电子邮件地址中的点位置来注册这么多次.

ecv*_*ecv 5

我相信你现在找到了解决方案,但为了完整起见......

基本上你需要按原样存储本地部分,而不是剥离点,然后在比较时从应用程序和注册表中删除点.喜欢:

$registered_emails[0]="e.xample@gmail.com"; //This is just to show how it was registered first time
$application_email="exam.ple@gmail.com"; //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)) {
      // "example@gmailcom"=="example@gmailcom"
         $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 (exam.ple@gmail.com)
Run Code Online (Sandbox Code Playgroud)

可能值得过去从列表中过滤掉所有gmail电子邮件,甚至将所有gmail电子邮件存储在一边; 当然不是最优雅的解决方案,但可能是最快的解决方案