【问题标题】:Using regex with p:keyFilter将正则表达式与 p:keyFilter 一起使用
【发布时间】:2016-12-29 05:21:00
【问题描述】:

我有一个p:inputMask 和一个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:0099:99 的所有值。

我该如何解决这个问题?

【问题讨论】:

  • 试试regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/"
  • @WiktorStribiżew 它不起作用:/当我在 regex101.com 上测试它时,我的正则表达式有效,但由于某种原因 inputMask 没有过滤输入
  • 如果你使用&lt;p:keyFilter regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/" /&gt;呢?
  • @WiktorStribiżew 我收到此错误:' 标签库支持命名空间:primefaces.org/ui,但没有为名称定义标签:keyFilter'
  • 尝试同时删除mask="99:99"。它可能会覆盖正则表达式检查。并使用&lt;pe:keyFilter regEx="/([01]?[0-9]|2[0-3]):[0-5][0-9]/" /&gt;

标签: regex jsf primefaces


【解决方案1】:

p:keyFilterf:validateRegexregExinputRegEx

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:inputXxx ...>
    <p:keyFilter inputRegEx="/([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 是在处理字段时执行的。所以,在简历中:

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

另见:

PrimeFaces 6 之前

请注意,p:keyFilter 自 6.0 起可用。对于旧版本,您需要 PrimeFaces Extensions pe:keyFilter。请注意,6.0 之前的 PFE 版本与 PF 版本不一致。

为了完全不同的东西

你可以看看pe:timePicker。该组件可能更适合您的需求。

【讨论】:

  • 谢谢,这很有用,但我真的想过滤用户输入以匹配我的正则表达式
  • 是的,我想阻止用户输入任何与正则表达式不匹配的内容,除非他输入的内容与其匹配。
猜你喜欢
  • 2015-12-18
  • 2011-06-19
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多