Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Вот как:

Используя его самостоятельно...

<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.

Ответ 2

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

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

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

Опять же, это просто проверяет общий формат электронной почты, а не является ли само по себе электронное письмо. Вы можете ввести [email protected] в качестве адреса и пройти проверку. Никакое регулярное выражение не может покрыть это. Если важна важность адреса электронной почты, объедините его с системой аутентификации. Просто отправьте какой-либо адрес электронной почты активации с ссылкой обратного вызова на указанный адрес электронной почты и позвольте пользователю войти по электронной почте.

Ответ 3

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

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

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

Ответ 4

Это поддерживает имена доменов 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,})$)?" />

Ответ 5

    
<p:inputText id="email" required="true" label="email" size="40"
    requiredMessage="Please enter your email address."
    validatorMessage="Invalid email format"
    value="#{userBean.email}">

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

</p:inputText>
<p:watermark for="email" value="Email Address *" />
<p:message for="email" />

<p:commandButton value="test" style="margin:20px"
    action="#{userBean.register}" ajax="false" />