Gmail dikkate alınarak, PHP bir yinelenen e-posta adresi için nasıl kontrol (user.name + label@gmail.com)

4 Cevap php

How can I check for duplicate email addresses in PHP, akılda Gmail'in otomatik etiketleme ve noktalama imkanı ile?

Örneğin, ben bu çiftleri olarak algılanabilir hitaben istiyorum:

         username@gmail.com
        user.name@gmail.com
   username+label@gmail.com
  user.name+label@gmail.com

Daniel A. Beyaz iddia ne rağmen: istediğiniz gibi Gmail'de, '@' (ve etiket) önce rastgele yerlerde nokta kadar yerleştirilebilir. user.name @ gmail.com ve username@gmail.com aslında aynı kullanıcı bulunmaktadır.

4 Cevap

Karşılaştırarak önce temel forma adresini soyun. Bir fonksiyonu normalise() etiketi şerit olacak yapmak, sonra tüm noktalar kaldırın. Sonra yoluyla adreslerini karşılaştırabilirsiniz:

normalise(address1) == normalise(address2)

Eğer çok sık yapmak zorunda kalırsanız, çok normalleştirilmiş formda adreslerini kaydedin, böylece geri çok sık onları dönüştürmek zorunda değilsiniz.

Belki de bu daha iyi "(user.name + label@gmail.com) dikkate alınarak, PHP gmail adreslerini normalleştirmek için nasıl" başlıklı olacaktır

Yukarıdaki iki teknik çözümler var. Ben farklı bir yol gitmek ve bunu yapmak için çalışıyoruz neden isteyeceğiz. Bu bana pek doğru gelmiyor. Eğer birisi farklı e-posta adreslerini kullanarak sitenize birden çok kez kayıt önlemek için çalışıyoruz? Bu sadece özel bir durumda önlemek olacaktır.

Ben kendi etki, example.com var ve bu etki herhangi bir adrese gider herhangi bir e-posta benim tek kutusuna gider. Sen, şimdi, ucunda tek bir adrese benim example.com bir şey normalleştirmek için bir kontrol koymak istiyor musunuz?

Aynı farklı olarak official e-mail address format, bu adreslere göre eşleştirmeye çalışıyoruz.

E-posta adresi ayrıştırma şeyler ve rahatsız edici kullanıcıları bozmadan, doğru yapmak gerçekten çok zor ..

Eğer gerçekten bunu yapmak gerekiyorsa İlk, ben soru olacak? Neden farklı alt adresleri ile birden fazla e-posta adresi var mı?

Emin Bunu yapmak için ihtiyacınız varsa, ilk rfc0822, daha sonra değiştirebilirsiniz this email address parsing regex e-posta tüm bölümlerini ayıklamak için, ve onları etiket hariç recombine okundu ..

Biraz daha .. pratik, E-posta Adresi wikipedia sayfası adres biçimi bu bölümünde bir bölüm vardır, Sub-addressing.

Kod powtac çalışması gerekir gibi görünüyor yayınlanmıştır - sürece hesapları veya bir şey silmek için otomatik bir şekilde bunu kullanarak değil gibi, ince olmalıdır.

"Otomatik etiketleme" bir GMail belirli bir özellik değildir unutmayın, Gmail, sadece Diğer posta sunucuları bu özelliği desteklemiyor .. popülerleştiren, bazı + kullanarak ayırıcı olarak kullanarak diğerleri - . Eğer GMail adreslerde özel durum mekanlara gidiyoruz, aynı zamanda googlemail.com alanı dikkate almayı unutmayın

Ben böyle Zend Validator artırdık.

<?php
class My_Validate_EmailAddress extends Zend_Validate_EmailAddress
{
    public function isValid($value)
    {
        $valid = parent::isValid($value);
        if ($valid
                && in_array($this->_hostname, array('gmail.com', 'googlemail.com'))
                && substr_count($this->_localPart, '.') > 1) {
            $this->_error(parent::INVALID_HOSTNAME);
            $valid = false;
        }
        return valid;
    }
}

Gmail adresi birden fazla "nokta" sembolü ile e-posta geçersiz kabul edilir. Bazı durumlarda, bu mantıklı bir çözüm değil, ama bu benim için çalışıyor.