2011-12-03 16 views
5

Her zaman düzenli ifadeleri bir baş ağrısı buluyorum ve googling gerçekten yardımcı olmadı. Ben artı sembollerle e-postalar, bu besbelli işe yaramaz izin etmek istiyorsanız, örneğin, Ancak /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/Regex e-posta - e-postada artı sembollere nasıl izin verilir?

: [email protected]

Şu anda aşağıdaki ifadeyi (preg_match) kullanıyorum

İfademi izin vermek için nasıl değiştirmem gerekir? Tüm yardım için şimdiden teşekkür ederiz!

+0

E-posta adreslerini doğrulamak için normal ifadeyi kullanmamalısınız (ödün vermek istediğiniz metinler) [bu soru] konusuna bakın (http://stackoverflow.com/questions/201323/what-is-the-best-regular- ifade-için-onaylama-e-posta adresleri) –

cevap

8

Sadece, e-posta doğrulama için Phps yerleşik regex kullanmalıdır:

filter_var($email, FILTER_VALIDATE_EMAIL) 

(fiili hayvan için veya https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L499) filter_var ve FILTER_VALIDATE_EMAIL bakınız.

+0

Yeap. Bu güzel bir cevap. +1 – FailedDev

+0

Ve merak ettiyseniz, 'FILTER_VALIDATE_EMAIL' bir regex kullanır. Bunu http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view=markup satırında görebilirsiniz 525 –

+0

Teşekkürler - müthiş cevap! Yine de, örneğin, [email protected] adresini doğrulamıyor - sözümüzü konuştuğumuz şekilde güncellemeyi umuyoruz ki umarım en son kararlı sürümde sabittir! –

1

karakter koleksiyonuna [] içine \+ eklemek deneyin:

/^[_a-z0-9-]+(.[_a-z0-9-\+]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$/ 
7

Sizin wrong regex başka wrong regex şekilde değiştirilebilir:

istediğiniz + karakter için izin verir
/^[\w-]+(\.[\w+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/ 

. Ama yine de wrong. o her şeyi kapsar çünkü

+2

Bu ilk kez bir ** yanlış ** yanıtı için +1 veriyorum :) – Bazzz

İlgili konular