2011-10-24 28 views

Respuesta

40

Aquí es cómo:

Utilizando yo mismo ...

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

+0

cómo para actualizar la expresión regular anterior para hacer solo los dominios válidos: .com, .net, .org, .edu? ¿Alguna idea de cómo hacer que esta validación en el enfoque se pierda? –

+3

Aquí se muestra cómo: '' – Daniel

+0

No funciona para un correo electrónico completamente válido que contenga el signo más, como [email protected] – Igor

9

aquí está mi versión y funciona así:

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

y yo hicimos una demostración here

48

Toda expresión regular intenta validar el formato de correo electrónico basado en caracteres latinos están roto. No admiten internationalized domain names que estaban disponibles desde mayo de 2010. Sí, lo leyó bien, los caracteres no latinos se permiten desde entonces en los nombres de dominio y, por lo tanto, también en las direcciones de correo electrónico.

Que son extremadamente muchos de los caracteres posibles para validar. Lo mejor es simplemente mantenerlo simple. La siguiente expresión regular solo valida el formato de correo electrónico en función de la aparición de los caracteres @ y ..

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

Una vez más, esto sólo valida el formato de correo electrónico en general, no si el correo electrónico en sí es de fiar. Todavía se puede ingresar [email protected] como dirección y pasar la validación. Nadie regex puede cubrir eso. Si la validez de la dirección de correo electrónico es tan importante, combínela con un sistema de autenticación. Simplemente envíe un tipo de correo electrónico de activación con un enlace de devolución de llamada a la dirección de correo electrónico en cuestión y permita que el usuario inicie sesión por correo electrónico.

+0

un correo electrónico [email protected] es un correo electrónico válido pero no está validado por este patrón de expresiones regulares todavía +1 para la aplicación – Anas

+2

@anas: Funciona para mí. Tal vez necesita doble barras invertidas? – BalusC

+0

Sí, tal vez dos barras invertidas, Copie pegado su expresión regular y lo intenté, pero no funcionó solo para este correo electrónico. – Anas

0

Ésta es compatible con Unicode nombres de dominio en el correo electrónico:

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

... y éste valida de correo electrónico sólo cuando se introduce de correo electrónico (e-mail no es obligatorio Campo en la forma):

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