Bir dize PHP bir e-posta adresi olup olmadığını kontrol edin

9 Cevap php

I am trying to do an SQL query, but I need to check somehow if the value is an email address. I need a way to check if $user is an email address, because I have user values such as this in my table.

test
test2
test@example.com
test2@example.com
test392
test@example.net

ve böylece ...

I need to make it so $useremail denetler bir e-posta adresi ise $user bulmak için. Yani değerlerini güncelleyebilirsiniz, WHERE user=test OR user=test@example.com, vb

$user = strtolower($olduser);
$useremail = "";

mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");

9 Cevap

Düzenli ifadeler olmadan:

<?php
    if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>

Basit yaklaşım bu nasıl olabilir doğru hakkında bazı anlaşmazlıklar var olsa da, e-posta adreslerini kontrol etmek için normal bir ifade kullanmaktır. Bu işlem, burada ayrıntılı olarak ele alınmıştır:

http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses

Eğer düzenli ifadeye dayalı veritabanından seçmek için MySQL Regexp kullanabilirsiniz:

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Bunu bir e-posta adresi maçları görmek için giriş dizesi doğrulamak için normal ifadeleri kullanabilirsiniz:

<?php 
$email = "someone@example.com"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
} 
?>

From: http://www.totallyphp.co.uk/code/validate%5Fan%5Femail%5Faddress%5Fusing%5Fregular%5Fexpressions.htm

EDIT: daha doğru ifadeler için, bu soru üzerine Travis answer başvurun

Ben sitelerin yüzlerce genelinde yıllardır bu işlevi kullanarak oldum. Bu muhtemelen mükemmel değil, ama ben yanlış negatif (ya da pozitif) bir şikayeti yoktu ettik:

function validate_email($email) {
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}

Since everybody is posting their regular expression, here's mine: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

Bilgime iyi için, çoğu kişi genellikle dahil olmayan şeyleri bir sürü dahil RFC şartnamede her şeyi destekler.

Yanı sıra, çok all mevcut TLD'ler (örneğin, .info ve .museum da dahil olmak üzere) ve yaklaşan ICANN karar Çin izin desteklemediği tüm düzenli ifade önerileri ve URL aşağıdaki daha genel regex yeterli olduğu için ([a-z] ve \w başarısız izin olurdu) Arapça

([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)

Ben de yapıyorum WHERE user=test OR user=test@example.com çok hata eğilimli olduğunu belirtmek istiyorum. Iyi tabloda bir autogenerated PK kullanın ve WHERE maddesinde kullanabilirsiniz.

Gerçekten RFCxxxx özellikleri uygun sıkı, uzun ve okunamaz mailregexes değerini görmüyorum. En iyi yolu posta adresini onaylamak izin son kullanıcı için bir etkinleştirme anahtarı ile bir bağlantı ile bir posta göndermek için hala. De formunda bu bildirin. Eğer şifreler için ne gibi Gerekirse kullanıcı iki kez e-posta adresini yazın izin.

Bu fonksiyon is_email() dizesi geçerli bir e-posta adresi olup olmadığını size bir kesin cevap verecektir. Bildiğim kadarıyla, başka hiçbir çözüm yetki aynı seviyede ile yapacak.

Ben doğru örnek anlamak, bu gibi kullanabilirsiniz

$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';

Yerleşik işlevi PHP eksik. I is_email() bu yüzden benim kendi trompet çalıyorum ilkesi yazarı değilim, ama kimse şimdiye kadar bir daha olması gerektiğini için bu işin içine bir sürü koyduk.

Bu büyük bir yöntem değildir ve @ ve etki uzantılı bir e-posta gibi görünüyor eğer e-posta olup olmadığını kontrol etmez, Bu sadece denetler.

function check_email($x) {

   if (strpos($x, "@") !== false) {
      $split = explode("@", $x);
         if (strpos($split['1'], ".") !== false) { return 'Is an email'; }
         else { return 'invalid email'; }
   }
   else { return 'invalid email'; }

}

echo check_email('my@email.com');

Correct E-posta doğrulama göre RFC 5322 oldukça karmaşıktır.

this dışarı, sen bir şey kurmak yardımcı olmalıdır edin