我有一个p:inputMask
with a p:keyFilter
来匹配时间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
to 99:99
.
我该如何解决这个问题?
p:keyFilter
versus f:validateRegex
– regEx
versus 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 正则表达式 while, whilef:validateRegex
需要 Java 正则表达式。和,p:keyFilter inputRegEx
在按键时检查,同时f:validateRegex
当处理该字段时执行。正确的使用方法p:keyFilter
将会:
<p:inputXxx ...>
<p:keyFilter inputRegEx="/[0-9:]/"/>
</p:inputXxx>
但这仍然会允许无效输入。
所以,在简历中:
Property |
p:keyFilter inputRegEx="..." |
f:validateRegex pattern="..." |
Regular expression type |
JavaScript |
Java |
Executed when |
Key up JavaScript event is triggered |
Component is processed |
这适用于所有文本输入组件(例如p:inputText
),因此不仅对p:inputMask
您正在使用)。
也可以看看:
- https://primefaces.github.io/primefaces/10_0_0/#/components/keyfilter https://primefaces.github.io/primefaces/10_0_0/#/components/keyfilter
- 将 Javascript 正则表达式转换为 Java 语法 https://stackoverflow.com/questions/8754444/convert-javascript-regular-expression-to-java-syntax/52925590
PrimeFaces 6 之前
注意p:keyFilter
从 6.0 开始可用。对于旧版本,您需要 PrimeFaces Extensionspe:keyFilter
。请注意,6.0 之前的 PFE 版本与 PF 版本不一致。
对于完全不同的东西
你可以简单地使用p:datePicker
,现在只能用于输入时间(小时和分钟):
<p:datePicker pattern="HH:mm" .../>
或者你可以看看pe:timePicker http://www.primefaces.org/showcase-ext/sections/timePicker/basicUsage.jsf.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)