Preg_match için PHP'nin eregi değiştirmek için nasıl [yinelenen]

2 Cevap php

Possible Duplicate:
How can I convert ereg expressions to preg in PHP?

Yardıma ihtiyacım var, biraz altında bir e-posta doğrulamak için küçük bir çok temel regex, ben o büyük çalışmıyor fark yok ama benim ihtiyaçları için şimdi için ok.

Şu anda Birisi nasıl yapmak bana gösterebilir PHP'nin eregi function php.net şimdi bir itfa fonksiyon ve ben, işe yaramazsa sadece preg_match ile Erei yerine, yerine preg_match kullanmanız gerektiğini söylüyor hangi kullanır işe?

function validate_email($email) {
    if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}
function validate_email($email) {
    if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}

2 Cevap

Perl-tarzı düzenli ifade kalıpları her zaman ayrılmış olması gerekir. Dizesindeki ilk karakter sınırlayıcı kabul, bu nedenle böyle bir şeydir:

function validate_email($email) {
    if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}

Bu ayraç karakteri olarak ^ kullanmaya çalışıyorum ama (tabii ki) regex sonu için hiçbir eşleştirme ^ bulundu çünkü ilk girişimi işe yaramadı nedenidir.

Üç şeyleri değiştirmek gerekir

  1. desen sınırlayıcı eklemeniz gerekir (herhangi bir karakter olabilir, ama bir eğik çizgi en sık)
  2. [[: Alnum:]] PCRE eşdeğeri ile değiştirilmesi gerekir
  3. "I" "eregi" harf duyarsız, PCRE bir bayrak, özellikle i bayrak ile yok demektir.

Aksi takdirde, geri kalanı (evet, bu tür gereksiz = P bulunuyor) PCRE uyumlu görünüyor

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"