【问题标题】:Email validation using regular expression in JSF 2 / PrimeFaces在 JSF 2 / PrimeFaces 中使用正则表达式进行电子邮件验证
【发布时间】:2011-12-14 01:50:59
【问题描述】:

我有一个包含电子邮件地址的输入字段:

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

如何在 JSF 2 / PrimeFaces 中使用正则表达式将输入的值验证为有效的电子邮件地址?

【问题讨论】:

    标签: regex jsf-2 primefaces email-validation


    【解决方案1】:

    所有基于拉丁文字符验证电子邮件格式的正则表达式均损坏。他们不支持自 2010 年 5 月以来可用的 internationalized domain names。是的,您没看错,从那时起,域名和电子邮件地址中都允许使用非拉丁字符。

    因此,要验证的可能字符非常多。最好是保持简单。以下正则表达式仅根据 @. 字符的出现验证电子邮件格式。

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

    同样,这只是验证一般电子邮件格式,而不是电子邮件本身是否合法。仍然可以输入aa@bb.cc 作为地址并通过验证。没有一个正则表达式可以涵盖这一点。如果电子邮件地址的有效性如此重要,请将其与身份验证系统结合使用。只需向相关电子邮件地址发送某种带有回调链接的激活电子邮件,并让用户通过电子邮件地址登录。

    【讨论】:

    • 一封电子邮件 k092167@nu.edu.pk 是一个有效的电子邮件,但它没有被这个正则表达式模式验证,仍然为应用程序 +1
    • @anas:对我有用。也许您需要双反斜杠?
    • 是的,也许双反斜杠可以,我复制粘贴了你的正则表达式并尝试过,但它只适用于这封电子邮件。
    【解决方案2】:

    方法如下:

    自己用...

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

    丹尼尔。

    【讨论】:

    • 如何更新上述正则表达式以仅生成有效域:.com、.net、.org、.edu?还有任何想法如何使这种对焦点的验证丢失?
    • 方法如下:&lt;f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.(com|net|org|edu)"/&gt;
    • 不适用于包含加号的完全有效的电子邮件,例如 name+surname@domain.com。
    【解决方案3】:

    这是我的版本,效果很好:

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

    我做了一个演示here

    【讨论】:

      【解决方案4】:

      这个支持邮件中的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,})$)?" />
      

      【讨论】:

      • 当表单中不需要电子邮件(可选)时,第二个对我非常有用
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 2020-07-22
        • 2012-11-23
        • 2014-03-03
        • 2020-11-04
        • 1970-01-01
        • 2014-04-14
        相关资源
        最近更新 更多