我有一个带有p:keyFilter
的p:inputMask
,用于匹配HH:mm
格式的时间,如下所示:
<p:inputMask mask="99:99" ...>
<p:keyFilter regEx="([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"/>
</p:inputMask>
但它并不起作用,并且接受从
00:00
到99:99
的所有值。我该如何解决?我有一个带有p:keyFilter
的p:inputMask
,用于匹配HH:mm
格式的时间,如下所示:
<p:inputMask mask="99:99" ...>
<p:keyFilter regEx="([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"/>
</p:inputMask>
00:00
到99:99
的所有值。我该如何解决?p:keyFilter
与f:validateRegex
——regEx
与inputRegEx
p:keyFilter
使用regEx
属性来过滤字符(在每个按键时),它不允许您验证表达式(对于完整输入的值)。如果要验证输入是否与正则表达式匹配,请使用inputRegEx
属性或f:validateRegex
。
因此,在您的情况下,您可以使用:
<p:inputXxx ...>
<f:validateRegex pattern="([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"/>
</p:inputXxx>
请注意,p:keyFilter
需要 JavaScript 正则表达式,而 f:validateRegex
需要 Java 正则表达式。并且,p:keyFilter inputRegEx
在按键抬起时进行检查,而 f:validateRegex
在字段处理时执行。正确使用 p:keyFilter
的方法如下:<p:inputXxx ...>
<p:keyFilter inputRegEx="/[0-9:]/"/>
</p:inputXxx>
但这仍然允许无效输入。
所以,总之:
属性 | p:keyFilter inputRegEx="..." |
f:validateRegex pattern="..." |
---|---|---|
正则表达式类型 | JavaScript | Java |
执行时机 | 触发键盘弹起JavaScript事件 | 处理组件 |
所有文本输入组件(例如p:inputText
)都适用,因此不仅适用于您正在使用的p:inputMask
)。
另请参见:
请注意,p:keyFilter
自6.0以来可用。 对于旧版本,您需要使用PrimeFaces Extensions的pe:keyFilter
。 请注意,6.0之前的PFE版本与PF版本不对齐。
您可以简单地使用p:datePicker
,现在它可以用于仅输入时间(小时和分钟):
<p:datePicker pattern="HH:mm" .../>
或者您可以查看pe:timePicker
。
regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/"
。 - Wiktor Stribiżew<p:keyFilter regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/" />
会怎么样? - Wiktor Stribiżewmask="99:99"
。它可能会覆盖正则表达式检查。并使用<pe:keyFilter regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/" />
。 - Wiktor Stribiżew