2011-10-24 179 views
28

我有一个输入领域采取的电子邮件地址:电子邮件验证/ PrimeFaces

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

我如何可以验证所输入的值使用正则表达式在JSF 2/PrimeFaces一个有效的电子邮件地址?

回答

40

方法如下:

使用它自己...

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

丹尼尔。

+0

如何更新上面的正则表达式,只有有效的域名:.com,.net,.org,.edu? 也有任何想法如何使这个验证焦点丢失? –

+3

这里是:'' – Daniel

+0

不适用于包含加号的完全有效的电子邮件,例如[email protected]。 – Igor

9

这里是我的版本,它工作得很好:

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

和我做了一个演示here

48

所有的正则表达式尝试验证基于拉丁字符的电子邮件格式。他们不支持自2010年5月以来可用的internationalized domain names。是的,您阅读正确,非拉丁字符是允许在域名,因此也允许电子邮件地址。

这是非常多的可能字符来验证。最好的就是保持简单。以下正则表达式仅基于@.字符的出现来验证电子邮件格式。

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

此外,这只是验证一般的电子邮件格式,而不是电子邮件本身是否合法。仍然可以输入[email protected]作为地址并通过验证。没有一个正则表达式可以覆盖这一点。如果电子邮件地址的有效性很重要,请将其与认证系统结合使用。只需发送某种具有回复链接的激活电子邮件到相关电子邮件地址,并让用户通过电子邮件地址登录即可。

+0

电子邮件[email protected]是一个有效的电子邮件,但它没有通过这个正则表达式模式验证仍然为应用程序的+1 – Anas

+2

@anas:适用于我。也许你需要双反斜杠? – BalusC

+0

是的,也许双反斜杠会做,我复制粘贴你的正则表达式,并尝试,但它不适用于此电子邮件。 – Anas

0

这一个支持Unicode域名的电子邮件:

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

...并且只输入时的邮箱(email不需要在表单字段)这一个验证电子邮件:

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