Проверка электронной почты с использованием регулярного выражения в JSF 2 / PrimeFaces - PullRequest
31 голосов
/ 24 октября 2011

У меня есть поле ввода с адресом электронной почты:

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

Как я могу проверить введенное значение как действительный адрес электронной почты, используя регулярное выражение в JSF 2 / PrimeFaces?

Ответы [ 4 ]

50 голосов
/ 10 октября 2012

Все регулярные выражения пытаются проверить формат электронной почты на основе Латиница символы сломаны .Они не поддерживают интернационализированные доменные имена , которые были доступны с мая 2010 года. Да, вы правильно прочитали, с тех пор нелатинские символы разрешены в именах доменов и, следовательно, также в адресах электронной почты.

Таким образом, это чрезвычайно много возможных символов для проверки.Лучше просто держать это просто.Следующее регулярное выражение только проверяет формат электронной почты на основе вхождения символов @ и ..

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

Опять же, это просто проверяет общий формат электронной почты, а не на то, является ли электронная почта самой действительной.Можно все еще ввести aa@bb.cc в качестве адреса и пройти проверку.Никто из регулярных выражений не может это охватить.Если действительность адреса электронной почты так важна, объедините его с системой аутентификации.Просто отправьте электронное письмо с ссылкой для обратного вызова на указанный адрес электронной почты и позвольте пользователю войти в систему по адресу электронной почты.

45 голосов
/ 28 октября 2011

Вот как:

Использую это сам ...

<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" />

Даниэль.

10 голосов
/ 10 октября 2012

Вот моя версия, и она хорошо работает:

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

И я сделал демо здесь

0 голосов
/ 19 октября 2017

Это поддерживает доменные имена Unicode в электронной почте:

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

... и этот проверяет электронную почту только при вводе электронной почты (адрес электронной почты не является обязательным для заполнения в форме):

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