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?
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.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 Latin są zł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.
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
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,})$)?" />
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