Walidacja wiadomości e-mail przy użyciu wyrażenia regularnego w JSF 2 / PrimeFaces

Mam pole wprowadzania, które przyjmuje adres e-mail:

<h:inputText value="#{register.user.email}" required="true" />

Jak mogę zweryfikować wpisaną wartość jako poprawny adres e-mail używając regex w JSF 2 / PrimeFaces?

Author: BalusC, 2011-10-24

4 answers

Oto jak:

Sam go używam...
<h:inputText id="email" value="#{settingsBean.aFriendEmail}" required="true" label="Email" validatorMessage="#{settingsBean.aFriendEmail} is not valid">
    <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]" />
</h:inputText>
<p:message for="email" />
Daniel.
 42
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-28 17:03:05

Wszystkie wyrażenia regularne próbujące zweryfikować format wiadomości e-mail na podstawie znaków Latinzłamane. Nie obsługują międzynarodowych nazw domen , które były dostępne od maja 2010 roku. Tak, dobrze to przeczytałeś, od tego czasu w nazwach domen, a więc i adresach e-mail, dozwolone są znaki inne niż łacińskie.

Które są więc bardzo dużo możliwych znaków do zweryfikowania. Najlepiej, żeby to było proste. Poniższe wyrażenia regularne sprawdzają poprawność wiadomości e-mail format oparty na występowaniu znaków @ i ..

<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />

Ponownie, to po prostu sprawdza ogólny format wiadomości e-mail, a nie czy sama wiadomość e-mail jest legalna. Nadal można wpisać [email protected] jako adres i przejść walidację. Nikt regex tego nie pokryje. Jeśli ważność adresu e-mail jest tak ważna, połącz go z systemem uwierzytelniania. Wystarczy wysłać jakiś e-mail aktywacyjny z linkiem zwrotnym na dany adres e-mail i pozwolić użytkownikowi zalogować się przez e-mail adres.

 49
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-10 16:31:09

Oto moja wersja i działa dobrze:

<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />

I zrobiłem demo tutaj

 10
Author: mkyong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-10 14:51:45

Ten obsługuje nazwy domen unicode w e-mailu:

<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$" />

... a ten sprawdza e-mail tylko po wpisaniu e-maila (e-mail nie jest wymagane w formularzu):

<f:validateRegex pattern="(^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$)?" />
 0
Author: Tere Hommikust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 12:03:29