0

私がしていること:
私のサイトに登録したいスパマーを減らそうとしています.

そして、私はそれを知っています:
ドットはgmailでは無視され、電子メールアドレスのローカル部分のどこにでもドットを入れることができますが、最初の位置と@の前の最後の位置.

問題:
ユーザーが ex.ample@gmail.com でサイトに登録した場合は問題ありませんが、ex.am.pl.e@gmail.com などで再度サイトに登録できると問題が発生します。

私がしたこと
は、電子メールのローカル部分のドットを削除することでしたが、ユーザーが入力したばかりの電子メール アドレスでは送信できないことに気付きました。

私が欲しいのは、
この問題を克服する方法はありますか? この状況では、電子メール アドレスのドット位置を変更することで、何度も登録できるからです。

4

1 に答える 1

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)

おそらく、前にすべての Gmail メールをリストから除外するか、すべての Gmail メールを脇に保管しておく価値があるかもしれません。確かに最もエレガントなソリューションではありませんが、おそらく最速のソリューションです

于 2012-12-06T14:32:48.703 に答える