Neden bu basit e-posta adresi doğrulama benim için çalışmıyor?

8 Cevap php

Possible Duplicate:
How to validate an email address in PHP

İşte benim kod; Ben bir PHP kitaptan reg ex var.

function is_email($email) {
// Checks for proper email format
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[AZa-z0-9-]+)+[A-Za-z]$/', $email)) {
    return false;
} else {
    return true;
}
}

Şimdi e-posta ben kullanıyorum geçerli olup olmadığını görmek için test etmek için:

if (is_email($_POST['email'])==TRUE){
    echo 'valid email';
}

if (is_email($_POST['email'])==FALSE){
    echo 'not valid email';
}   

I must be missing something really basic. No matter what kinda email input it comes back as invalid.

Birisi bana ışık göstermek lütfen.

8 Cevap

Bir back çizgi un kaçtı

'/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[AZa-z0-9-]+)+[A-Za-z]$/'

olmalıdır

'/^[A-Za-z0-9!#$%&\'*+-\/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[AZa-z0-9-]+)+[A-Za-z]$/'

Bir e-posta test ederken Also, .. bu kullanın:

if(is_email($_POST['email'])) {

        echo 'valid email';
}
else {

        echo 'not valid email';
}

One more thing, When you use dash - inside brackets, it should come either at first or last so that it is not interpreted as a range. So, your regular expression olmalıdır:

'/^[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+@[A-Za-z0-9-]+(\.[AZa-z0-9-]+)+[A-Za-z]$/'

Edit There's one more mistake in the regex ... one bracket starts with AZ (missing dash). It olmalıdır

'/^[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/'

Neden arama kodu FALSE karşı test ve TRUE, sonra functon gelen false dönen ve true edilir?

Ben bir e-posta doğrulama kaçınılmaz bazı biçiminde düşünmek değil gidiyoruz, bu kadar karmaşık olmak Regex yapmak kötü bir fikir olduğunu düşünüyorum, ve bazı kullanıcı rahatsız olabilir ve sitenize geri gelmek asla gidiyor. Bütün mesele kullanıcı bir e-posta yanlış yazdığınız yardım için değil, bu nedenle böyle bir şey yapacak ...

/^[^\s,]+\@[\w.-]+\.[a-zA-Z]{2,6}$/

Normal ifadede ilk karakter sınıfında, çıkmamış bir çizgi var. +-/ muhtemelen +\-/ çünkü aksi takdirde +-/ arasında bir karakter aralığı olarak okunur + ve {gerektiğini okur regex bir kısmı [(4)]}. Diğerleri işaret gibi Additonally, bir çıkmamış var /.

Ne dersiniz: süper karmaşık düzenli ifadeler unutun ve PHP kendi filter extension kullanın. PHP'nin geliştiricileri hataları ve istismarlara endişe edelim ve gerçekten site veya uygulama büyük yapacak şeyi inşa zaman kullanabilirsiniz.

Ayrıca karşılaştırma booleans ile yapılmış olduğundan emin olmak için '===' operatörü deneyebilirsiniz ...

Ben başarılı bir regex ile bir e-posta adresi doğrulamak inanmıyorum.

Sen benim ücretsiz PHP fonksiyonunu is_email() adreslerini doğrulamak için kullanmak bekliyoruz. Bu [burada] indirmek için mevcut bulunuyor [1]. Ayrıca online olarak test edebilirsiniz.

Bu bir adres tam olarak 5321 uyumlu RFC olmasını sağlayacaktır. İsteğe bağlı olarak da etki gerçekten var ve bir MX kaydı olup olmadığını kontrol edebilirsiniz.

Bazı ISS'ler, özellikle Latin alfabesi kullanmayan ülkelerde, kendi kullanıcılarına uyumlu olmayan adreslerini vermek: Bir kullanıcının e-posta adresi gerçekte var olup olmadığını söylemek için bir onaylayıcısına güvenmemelisiniz. Burada e-posta doğrulama hakkında benim denemesinde Devamı: [http://isemail.info/about] [2].

Bir e-posta adresini doğrulamak için tek emin yolu (eşsiz bir onay linki ile) kendisine bir e-posta göndermek için olduğunu unutmayın.

Bunun dışında, sadece jayrdub suggests gibi basit bir regex kullanabilirsiniz.