2011-12-03 10 views
5

Zawsze uważam, że wyrazy regularne to bóle głowy, a korzystanie z google nie pomagało. Obecnie używam następujące wyrażenie (preg_match): /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/Regex e-mail - jak zezwolić na symbole plus w e-mailu?

Jeśli jednak chciałbym, aby umożliwić e-maile z plusem symboli, to oczywiście nie będzie działać, np [email protected]

Jak mogę zmienić wyrażenie, aby na to zezwolić? Z góry dziękuję za wszelką pomoc!

+0

Nie należy używać wyrażenia regularnego do sprawdzania poprawności adresów e-mail (osoby, które chcą kompromisować) Patrz [to pytanie] (http://stackoverflow.com/questions/201323/what-is-the-best-regular- wyrażenie-do-sprawdzania-adresów-adresów e-mail) –

Odpowiedz

8

Należy po prostu użyć phps wbudowanego regex do sprawdzania poczty e-mail, ponieważ obejmuje wszystkie rzeczy:

filter_var($email, FILTER_VALIDATE_EMAIL) 

Zobacz filter_var i FILTER_VALIDATE_EMAIL (lub https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L499 dla rzeczywistego zwierzęcia).

+0

Yeap. To dobra odpowiedź. +1 – FailedDev

+0

A gdybyś się zastanawiał, 'FILTER_VALIDATE_EMAIL' używa wyrażenia regularnego. Możesz to zobaczyć na http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view=markup line 525 –

+0

Dzięki - wspaniała odpowiedź! Jednak nadal nie sprawdza on na przykład adresu [email protected] - ulepszam mój php, gdy mówimy, więc mam nadzieję, że został poprawiony w najnowszej stabilnej wersji! –

1

Spróbuj dodać \+ do kolekcji char []:

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

Twój wrong regex może być zmieniony na inny wrong regex:

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

który pozwala na + charakteru gdzie chcesz. Ale mimo to jest to wrong.

+2

po raz pierwszy daje +1 za ** błędną ** odpowiedź :) – Bazzz

Powiązane problemy