【发布时间】:2011-12-14 01:50:59
【问题描述】:
我有一个包含电子邮件地址的输入字段:
<h:inputText value="#{register.user.email}" required="true" />
如何在 JSF 2 / PrimeFaces 中使用正则表达式将输入的值验证为有效的电子邮件地址?
【问题讨论】:
标签: regex jsf-2 primefaces email-validation
我有一个包含电子邮件地址的输入字段:
<h:inputText value="#{register.user.email}" required="true" />
如何在 JSF 2 / PrimeFaces 中使用正则表达式将输入的值验证为有效的电子邮件地址?
【问题讨论】:
标签: regex jsf-2 primefaces email-validation
所有基于拉丁文字符验证电子邮件格式的正则表达式均损坏。他们不支持自 2010 年 5 月以来可用的 internationalized domain names。是的,您没看错,从那时起,域名和电子邮件地址中都允许使用非拉丁字符。
因此,要验证的可能字符非常多。最好是保持简单。以下正则表达式仅根据 @ 和 . 字符的出现验证电子邮件格式。
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
同样,这只是验证一般电子邮件格式,而不是电子邮件本身是否合法。仍然可以输入aa@bb.cc 作为地址并通过验证。没有一个正则表达式可以涵盖这一点。如果电子邮件地址的有效性如此重要,请将其与身份验证系统结合使用。只需向相关电子邮件地址发送某种带有回调链接的激活电子邮件,并让用户通过电子邮件地址登录。
【讨论】:
方法如下:
自己用...
<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" />
丹尼尔。
【讨论】:
<f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.(com|net|org|edu)"/>
这是我的版本,效果很好:
<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
我做了一个演示here
【讨论】:
这个支持邮件中的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,})$)?" />
【讨论】:
<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" />
【讨论】: