regex - regulares - uppercase primefaces
Uso de regex con inputMask en primefaces (1)
Tengo un inputText con un keyfilter para que coincida con HH: MM de la siguiente manera:
<p:inputMask id="heureDebutPlanningSalleAppareil"
value="#{beanFormPlanningSalleAppareil.planningSalleAppareil.heureDebut}"
required="true" maxlength="4" mask="99:99"
requiredMessage="Heure de début : vous devez indiquer une valeur." >
<pe:keyFilter regEx="([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"/>
</p:inputMask>
Pero no funciona y acepta todos los valores de 00:00 a 99:99.
Como puedo resolver esto ?
p:keyFilter
versus f:validateRegex
p:keyFilter
se usa para filtrar caracteres (en cada trazo de tecla), no le permite validar una expresión (en el valor ingresado completo). Si desea validar si su entrada coincide con una expresión regular, use f:validateRegex
.
Entonces, en tu caso:
<p:inputMask id="heureDebutPlanningSalleAppareil"
value="#{beanFormPlanningSalleAppareil.planningSalleAppareil.heureDebut}"
required="true" maxlength="4" mask="99:99"
requiredMessage="Heure de début : vous devez indiquer une valeur.">
<f:validateRegex pattern="([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"/>
</p:inputMask>
Podría ajaxificarlo para mostrar un mensaje sobre el cambio:
<p:inputMask id="heureDebutPlanningSalleAppareil"
value="#{beanFormPlanningSalleAppareil.planningSalleAppareil.heureDebut}"
required="true" maxlength="4" mask="99:99"
requiredMessage="Heure de début : vous devez indiquer une valeur."
validatorMessage="Your message">
<f:validateRegex pattern="^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"/>
<p:ajax process="@this" update="heureDebutPlanningSalleAppareilMsg"/>
</p:inputMask>
<p:message for="heureDebutPlanningSalleAppareil"
id="heureDebutPlanningSalleAppareilMsg"/>
Por algo completamente diferente
Puedes echar un vistazo a pe:timePicker
. Este componente está hecho para lo que estás tratando de "piratear" aquí.