【问题标题】:how to validate string input field for pattern on JSF form如何验证 JSF 表单上模式的字符串输入字段
【发布时间】:2013-10-10 06:15:12
【问题描述】:

我有一个要求,其中接受字符串的输入字段只能具有这些格式中的一种,使用 javascript 或 jsf 验证器实现这一点的最佳方法是什么:

N/A-N-N-N 或 N/A-N-N-N-N

上面的模式中可以有任何字母代替A。上面的模式中可以有任何数字代替0以外的N。

【问题讨论】:

    标签: string validation jsf


    【解决方案1】:
    <h:inputText>
        <f:validateRegex pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})" />
    </h:inputText>
    

    从这个模式中,只有在 6 到 20 的范围内且至少有一个数字、一个大写字母、一个小写字母和一个特殊符号(“@#$%”)时才被接受

    【讨论】:

      【解决方案2】:

      如果您允许输入大写或小写字符,请使用以下表达式。

      <h:inputText>
          <f:validateRegex pattern="[1-9]/[a-zA-Z](-[1-9]){3,4}" />
      </h:inputText>
      

      【讨论】:

        【解决方案3】:

        首先,没有“最好”的方法。只有“正确”的方式取决于具体的功能要求。

        在 JSF 中进行验证的常规方法是使用 standard validators available via &lt;f:validateXxx&gt; tags 之一,如果所需功能在标准标记中不可用,则使用 create a class which implements the Validator interface。另一种方法是按照您自己的建议通过 JavaScript 进行验证,但这完全违背了robustness of server-side validation,因为 JavaScript 代码由最终用户完全控制,因此最终用户可以编辑/欺骗/禁用。

        在您的特定情况下,您希望验证输入是否与常规模式匹配。在这种情况下,&lt;f:validateRegex&gt; 是该作业的正确标签。

        对于实际的正则模式,1 到 9 之间的任何数字都在由 [1-9] 表示的正则表达式中,而 A 和 Z 之间的任何字母字符在由 [A-Z] 表示的正则表达式中(区分大小写!如果你打算允许小写同样,使用[a-zA-Z])。像最后一个数字一样的任何“零次或一次出现”都在由(...)? 表示的正则表达式中,其中... 将替换为实际模式。其余的字符/- 可以按原样表示,只要它们不是正则表达式中的特殊字符,例如.( 等,否则需要用\ 转义.

        所以,总而言之,应该这样做:

        <h:inputText>
            <f:validateRegex pattern="[1-9]/[A-Z]-[1-9]-[1-9]-[1-9](-[1-9])?" />
        </h:inputText>
        

        另见:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-29
          • 2023-03-14
          • 1970-01-01
          • 2018-03-13
          • 1970-01-01
          • 1970-01-01
          • 2020-09-02
          • 2019-12-04
          相关资源
          最近更新 更多