如何在JSF表单上验证模式的字符串输入字段

时间:2013-10-03 13:52:01

标签: string validation jsf

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

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

上面的图案中可以有任何字母代替A.上面的图案中可以有任何数字代替N而不是0.

3 个答案:

答案 0 :(得分:3)

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

在JSF中验证的常规方法是使用standard validators available via <f:validateXxx> tags中的一个,或者如果标准标记中没有所需的功能,则使用create a class which implements the Validator interface。另一种方法是按照自己的建议通过JavaScript进行验证,但这完全会使robustness of server-side validation失败,因为JavaScript代码完全由最终用户控制,因此最终用户可以编辑/欺骗/解除。

在您的特定情况下,您希望验证输入是否与常规模式匹配。在这种情况下,<f:validateRegex>因此是作业的正确标记。

对于实际的常规模式,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>

另见:

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

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

从这种模式来看,只有当它在6到20的范围内且至少有一个数字,一个大写字母,一个小写字母和一个特殊符号(“@#$%”)