4

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

N/ANNN 或 N/ANNNN

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

4

3 回答 3

3

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

在 JSF 中进行验证的常规方法是使用通过tags可用的标准验证器之一<f:validateXxx>,或者如果所需的功能在标准标记中不可用,则创建一个实现 Validator 接口的类。另一种方法是按照您自己的建议通过 JavaScript 进行验证,但这完全破坏了服务器端验证的稳健性,因为 JavaScript 代码由最终用户完全控制,因此最终用户可以编辑/欺骗/禁用。

在您的特定情况下,您想要验证输入是否与常规模式匹配。在这种情况下,这<f:validateRegex>就是作业的正确标签。

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

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

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

也可以看看:

于 2013-10-03T14:55:57.430 回答
1

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

<h:inputText>
    <f:validateRegex pattern="[1-9]/[a-zA-Z](-[1-9]){3,4}" />
</h:inputText>
于 2016-07-13T09:53:04.803 回答
-1
<h:inputText>
    <f:validateRegex pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})" />
</h:inputText>

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

于 2017-07-06T11:12:16.000 回答