web-dev-qa-db-fra.com

Validation de courrier électronique à l'aide d'une expression régulière dans JSF 2/PrimeFaces

J'ai un champ de saisie prenant une adresse email:

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

Comment valider la valeur saisie en tant qu’adresse e-mail valide à l’aide de regex dans JSF 2/PrimeFaces?

29
NaaN

Voici comment:

En l'utilisant 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.

45
Daniel

Toutes les expressions rationnelles tentant de valider le format de courrier électronique en fonction des caractères Latin sont broken. Ils ne supportent pas les noms de domaine internationalisés qui étaient disponibles depuis mai 2010. Oui, vous le lisez correctement, les caractères non latins sont désormais autorisés dans les noms de domaine et donc aussi les adresses électroniques.

Ce sont donc extrêmement nombreux caractères possibles à valider. Le mieux est de rester simple. La regex suivante ne fait que valider le format de courrier électronique en fonction de l'occurrence des caractères @ et ..

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

Encore une fois, cela ne fait que valider le format de courrier électronique général, pas si le courrier électronique lui-même est légitime. On peut toujours entrer [email protected] comme adresse et réussir la validation. Aucun regex ne peut couvrir cela. Si la validité de l'adresse électronique est importante, combinez-la avec un système d'authentification. Envoyez simplement une sorte de courrier électronique d'activation avec un lien de rappel à l'adresse électronique en question et laissez l'utilisateur se connecter par adresse électronique. 

50
BalusC

Voici ma version et ça marche 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
mkyong

Celui-ci supporte les noms de domaine Unicode dans les emails:

<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 ne valide l'email que lorsque l'email est entré (l'email n'est pas obligatoire 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
Tere Hommikust