Validation par courriel en utilisant l'expression régulière dans JSF 2 / PrimeFaces

j'ai un champ de saisie de prendre une adresse e-mail:

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

Comment puis-je valider la valeur entrée comme une adresse email valide en utilisant regex dans JSF 2 / PrimeFaces?

29
demandé sur BalusC 2011-10-24 15:46:04

4 réponses

Voici comment faire:

à l'Aide de moi-même...

<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
répondu Daniel 2011-10-28 17:03:05

toutes les expressions régulières tentent de valider le format de courriel basé sur Latin les caractères sont cassé. Ils ne prennent pas en charge noms de domaine internationalisés disponibles depuis mai 2010. Oui, vous l'avez bien lu, les caractères non latins sont désormais autorisés dans les noms de domaine et donc aussi dans les adresses e-mail.

Qui sont donc extrêmement beaucoup de caractères possibles pour valider. Le mieux est de garder les choses simples. Le regex suivant valide juste le format de courriel basé sur l'occurrence du @ et . caractères.

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

encore une fois, cela valide simplement le format général du courriel, et non si le courriel lui-même est légitime. On peut encore entrer aa@bb.cc comme adresse et passer la validation. Personne ne peut couvrir ça. Si la validité de l'adresse e-mail est important, le combiner avec un système d'authentification. Juste envoyer des e-mail d'activation avec un rappel du lien à l'adresse email question et permettre à l'utilisateur de connexion par adresse de courriel.

49
répondu BalusC 2012-10-10 16:31:09

Voici ma version et ça fonctionne bien :

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

Et j'ai fait une démo ici

10
répondu mkyong 2012-10-10 14:51:45

celui-ci supporte les noms de domaines unicode dans email:

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

... et celui-ci valide l'email seulement quand l'email est entré (l'email n'est pas un champ requis dans le formulaire):

<f:validateRegex pattern="(^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$)?" />
0
répondu Tere Hommikust 2017-10-19 12:03:29