Bir e-posta adresinin iyi biçimlendirilmiş olup olmadığını kontrol etmenin en kolay ve en güvenli yolu bu filter_var()
işlevi kullanmaktır :
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
Ayrıca, alan adının bir MX
kayıt tanımlayıp tanımlamadığını da kontrol edebilirsiniz :
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
Ancak bu hala postanın var olduğunu garanti etmez. Bunu öğrenmenin tek yolu bir onay postası göndermektir.
Artık kolay cevabınız var, öğrenmeye ya da sadece hızlı cevabı kullanmaya devam ederseniz e-posta adresi doğrulaması hakkında okumaktan çekinmeyin. Alınmadım.
Normal ifade kullanarak bir e-posta adresini doğrulamaya çalışmak "imkansız" bir iştir. Yaptığınız regex'in işe yaramaz olduğunu söyleyecek kadar ileri gideceğim. E-posta adresleri ve yanlış e-posta adreslerini yakalamak için bir regex yazmakla ilgili üç rfc vardır ve aynı zamanda yanlış pozitifleri yoktur, hiçbir ölümcül yapamaz. PHP'nin işlevi tarafından kullanılan normal ifadenin testleri (başarısız ve başarılı) için bu listeye göz atın filter_var()
.
Yerleşik PHP işlevleri, e-posta istemcileri veya sunucuları bile doğru yapmaz. Yine de çoğu durumda filter_var
en iyi seçenektir.
PHP'nin (şu anda) e-posta adreslerini doğrulamak için hangi normal ifade modelini kullandığını bilmek istiyorsanız PHP kaynağına bakın .
E-posta adresleri hakkında daha fazla bilgi edinmek istiyorsanız, özellikleri okumaya başlamanızı öneririm, ancak sizi uyarmak zorundayım, herhangi bir streçle kolay bir okuma değil:
filter_var()
Zaten belirtildiği gibi sadece PHP 5.2'den beri mevcut olduğunu unutmayın . PHP'nin önceki sürümleriyle çalışmasını istiyorsanız, PHP'de kullanılan normal ifadeyi kullanabilirsiniz:
<?php
$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PS Yukarıda kullanılan normal ifade modeliyle ilgili bir not (PHP kaynağından). Görünüşe göre Michael Rushton'ın üzerinde bazı telif hakları var . Belirtildiği gibi: "Bu kodu kullanmaktan ve yeniden dağıtmaktan çekinmeyin. Lütfen bu telif hakkı bildirimini saklayın."
validateEmail
corret olurdu, geçerken$email
değil$EMAIL
.