PHP e-posta regex hala birbirilerine sonra 2 Punkte düz izin

5 Cevap php

PHP, ben postaları kontrol etmek için bu regex kullanabilirsiniz:

$rexMail = "/^[a-z0-9\._]+@{1}[a-z0-9-_]+\.{1}[a-z]{2,4}\.?[a-z]{0,2}$/i";

Çoğu durumda, bu yeterli olacaktır. Ancak, bu mail adresi regex için geçerli olduğu ortaya çıkıyor:

Test .. test@test.com

Bu mümkün olmamalıdır. Birden fazla nokta @ işaretinden önce izin alınması gerekirken, sağ birbirilerine sonra birden fazla olanları olması mümkün olmamalıdır.

Ben regex ile that iyi değilim ve bu çözmek için nasıl bilmiyorum.

. Co.uk, ya da en kötü gibi posta adresleri vardır için Ayrıca, ben, @ işaretinden sonra nokta miktarı hakkında çok emin değilim.

5 Cevap

İşte:

/^([a-z0-9_]\.?)*[a-z0-9_]+@([a-z0-9-_]+\.)+[a-z]{2,3}$/i

@ Sonra e-posta adresinin bir parçası potansiyel olarak herhangi bir geçerli bir etki alanı olduğunu, bu nedenle TLD yukarıda ayrılmış. Öğelerin herhangi bir sayıda izin vermek gerekir - örneğin, email.staff.mycompany.com geçerli bir ev sahipliği yapmaktadır. Ayrıca, üst düzey etki alanı içinde fazla 2 karakter bulunabilir; ortak olanlar çok (. com,. net, vb) 3 vardır.

Ancak, aşağıda VoteyDisciple en comment geçerlidir - teknik, bir e-posta adresi can içinde .. var.

Ilk, test .. test@example.com mükemmel geçerli bir e-posta adresi. Bir e-posta adresi @ işaretinden önce birden fazla ardışık dönem karakter olamaz diyor hiçbir şey yok. Aslında, bir (örn., +) izin vermeyen bazı karakterler de dahil olmak üzere, @ işaretinden önce hemen hemen her şey olabilir. Şimdi bunu yazdım gibi Yani, mükemmel geçerli adresleri çeşitli reddeden edilecektir.

Düzenli ifadeler ile yapıldığında e-posta adresi doğrulama genellikle yoldan gider neden bazı açıklama ile birlikte, hile yapacak basit bir ifadesi için http://www.regular-expressions.info/email.html bakın.

Sorun karakter sınıfları nasıl iştir: [a-z0-9._] +, yollarla, "Bunlardan biri - bu kural ile bir veya birden fazla times" gibi bir karakter sınıfı. Temel olarak, karakterleri tekrar edemez şekilde karakter sınıfının 'kurallar hiçbir şey yok.

Hüner dönemleri ile "sözcükleri" ayırmak istiyoruz ve bu hesaba gruplandırma almak zorunda olmasıdır.

Böyle bir şey düşünün:

$rexMail = "/^[a-z0-9_]+(\.[a-z0-9_]+)*@{1}[a-z0-9-_]+\.{1}[a-z]{2,4}\.?[a-z]{0,2}$/i";

Bu temelde, "diyor başka bir kelime ardından bir kelime (alfanümerik veya çizgi oluşur), daha sonra isteğe bağlı olarak (sıfır veya daha fazla kez) bir nokta." (Istediğiniz gibi Ve birçok veya birkaç kere tekrar edilebilir)

Eğer tam bir kez nicelik bunun için regex motoru aramaları belirtmek yoksa arada, {1}, nicelik, çünkü varsayılan olarak gerekli değildir.

Sen http://www.regular-expressions.info/email.html yararlı olması için bulabilirsiniz. Sadece düzenli ifadeler kullanarak denetimi geçerli bir email adresi uygulamak neredeyse imkansızdır. Ancak, bu sayfa çeşitli alternatifler üzerinde dokunur.

Ben sayfanın altına yakın birini kullanma eğiliminde. Ben çoğu web uygulama kullanımı için uygun bulundu ve PHP kaçması ile çalışmak için biraz modifiye var:

//courtesy of http://www.regular-expressions.info/email.html, modified to be escaped for PHP string and preg_match
$exp = '[a-z0-9!#$%&\'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?';
if (! preg_match('/^'.$exp.'$/i', $email)) return false;

Sen düzenli ifade mümkün olduğunca yumuşak olduğundan emin olmak istiyorum. Birçok geçerli adresler var olduğu gibi maç olmayacak.

Here is a PHP library for the job of email syntax validation: http://code.google.com/p/php-email-address-validation/

Aslında onlara bir e-posta göndererek olmadan e-posta doğrulamak oldukça zordur. Fakat SMTP doğrulama çoğu durumda çalışır, olsa başarısız da bir sürede tedavi edilmelidir, başarısız bir gerçek değil başarısız.

Here is a class that will validate emails via SMTP: http://code.google.com/p/php-smtp-email-validation/