2015-06-11 20 views
0

的情況是,我想只接受來自persion忽視Gmail的別名唯一的電子郵件地址(如果有任何其他服務做同樣的事情)驗證唯一的電子郵件忽視Gmail或其他服務別名

這樣做的原因是我們提供的折扣碼數量有限,公平地說,我們不希望只有一個電子郵件地址的人聲稱擁有大量折扣碼。

從我的理解:

  • 如果gmail.comgooglemail.com然後取出後,因爲這是別名的+和任何東西。
  • 如果是gmail,則從username中刪除任何點,因爲它們被忽略。 [email protected][email protected]相同
  • 不只是使+符號無效,因爲它對電子郵件地址有效。

是否有任何其他服務我需要注意的是,允許將其電子郵件地址別名爲多種形式以及針對我的方案的任何其他注意事項。

更新我有一個數據庫來存儲提交的電子郵件地址和聲明的代碼。

我也明白,很難停止聲稱多個代碼的人。禁止別名只是在那裏可能會減少它。

乾杯。

+0

你必須不斷更新你的數據庫。有大量的服務加上有全域的電子郵件地址,可以將任意數量的電子郵件地址轉發到一個帳戶! –

+0

好吧,總有一種或其他方式可以作弊!但是你需要有一個已知可能性的數據庫並經常更新它。 –

回答

2

編寫代碼以忽略單個服務中的少數已知別名格式(如Gmail)並不是什麼大不了的事。然而,試圖阻止一個人單獨根據電子郵件地址聲稱多種折扣是一種不可能完成的任務。

有很多不同的方式來創建新的電子郵件地址和別名。例如,有些服務可讓您創建一次性電子郵件,通過這些電子郵件您可以根據需要獲得儘可能多的不同地址。此外,只需幾美元,您就可以使用自己的域名獲得自己的電子郵件主機,您可以在其中註冊一堆地址和/或捕獲所有地址。

這將需要過高的資源來設法阻止任何人決定要求你的一堆折扣。除了電子郵件地址外,沒有其他識別方法。

我會考慮添加其他驗證方法。根據你在做什麼,這可能是連接到Facebook的東西,甚至要求信用卡的細節進行驗證。

+0

瞭解。我真的只是在增加路障之後,才使得它更加努力地宣稱獲得倍數。我知道完全停止是困難的。 Facebook身份驗證可能是一個合適的附加選項,我可以建議,信用卡信息可能太多,這種情況下。乾杯。 –

0

在這種情況下,你可以使用正則表達式。與此代碼,你可以將電子郵件數組轉換爲別名數組(您可以自定義每個郵件服務標誌圖案):

代碼:

$mails = ['[email protected]', '[email protected]', '[email protected]']; 
$valid_mails = []; 
$pattern = "/^(?P<name>[A-Za-z0-9._+\-\']+)@(?P<mail>[A-Za-z0-9.\-]+)\.[A-Za-z]{2,}$/"; 
$symbol_pattern = ['gmail'=>'/(\.|\+|-)/','yahoo'=>'/(\.)/']; 
foreach ($mails as $key=>$mail) { 
    $valid_mails[$key] = preg_replace_callback($pattern, function($match){ 
     global $symbol_pattern; 
     return preg_replace($symbol_pattern[$match['mail']], '', $match['name']); 
    }, $mail); 
} 
var_dump($valid_mails); 

輸出

array(3) { [0]=> string(9) "johnsmith" [1]=> string(9) "johnsmith" [2]=> string(9) "johnsmith" } 
+0

那些不是別名--gmail只是忽略了點。更重要的是地址擴展(通常使用'+'),這是大多數服務所支持的 - 所以'johnsmith + bar @ gmail.com'與'johnsmith + foo @ gmail.com'一起提供給同一個地方。你可以在不預先定義任何東西的情況下彌補這些。 – Synchro

相關問題