PHP e-posta doğrulama işlevi

10 Cevap

E-posta, enjeksiyon için) (mysql_real_escape_string bir eşdeğer var mı? Ben kullanıcı kendi e-posta gönderen bir form var. Birisi e-postaların bir virgülle ayrılmış listesini eklemek ve küfrettiği için sitemde kullanabilirsiniz korkuyorum.

10 Cevap

Ama "E-posta" alan o, sadece reply için değil mi?

Ayakta sok this regex.

Sadece tek bir e-posta adresi için yaygın olarak bulunan bir düzenli ifadenin karşı alan doğrulamak

function validate_email($e){
    return (bool)preg_match("`^[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`i", trim($e));
}

take a look at this function: http://dreamwave.cms-bg.info/2009/09/24/verify_email-php-function/

Ben de bunu izah ettik düşünüyorum. Bu benim blogu.

Birincil endişe ise, soru devletler olarak, kullanıcıların sadece herhangi bir virgül olup olmadığını kontrol etmek için açık cevap değil o, adresleri virgülle ayrılmış listesi girerek kendileri için küfrettiği sizi kandırmaya teşebbüs değil doğrulamak için Kullanıcının giriş?

Eski sürümleri olanlar için

/*
    # PHP Email Validation for versions LESS than PHP 5.2.0)
*/
$strEmail= mysql_real_escape_string($_POST['email_e']);
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $strEmail)){

        // valid email

        } else {

        // not a valid email
}

Ben iyi bir e-posta doğrulama bu kadar basit olmadığını buldu, bu yüzden sadece "@" ve eğer kontrol etmeye karar verdi "." string içinde.

function email_valid($email){
    /* EMAIL VALIDATION, CHECKS IF STRING CONTAINS "@" and "."  */

    if( strpos($email, "@") AND strpos($email, ".") ){
        return TRUE;
    }
    else {
        return FALSE;
    }
}

P.S. PDO veritabanına yazılması için tablolarını kullanmak istemiyorsanız, SQL enjeksiyonu neden olabilir semboller süzmek için EMİN OLUN

Bu, toplam dize uzunluğunu kontrol etmek kolay olacaktır - yani yerel kısmı maksimum 64 + @ + alanı bölüm max 255 karakter = 320 karakter, ama sonra kısa adreslerini spam hala mümkün olacaktır. Şu anda benim proje için e-posta doğrulama araştırma ve derinlemesine geçerli e-posta adreslerini ve RFC2822 açıklayan bu ilginç makaleyi email validation bulundu duyuyorum. Orada doğrulamak için çok daha basit bir yolu virgül spam etkili bir biçimi olan listeleri ayrılmış önleyecektir öneririz.

$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
   $isValid = false;
}
else
{
   $domain = substr($email, $atIndex+1);
   $local = substr($email, 0, $atIndex);
   // ... work with domain and local parts
}

Bu sadece son @ işaretini bularak e-posta adresini yıkar ve 64 karakter sınırı vardır adresinin yerel parçası olmak için önce geçen bütün beyan eder. Hiçbir @ işareti varsa o strrpos false bolean değeri dönecektir. Benim doğrulama işlevi bu yararlanarak olacaktır.

Bakabilirsiniz Regular Expressions in PHP!