Я пытаюсь ограничить ввод с помощью Primefaces keyFilter
, чтобы он соответствовал всем числам от 1 до 99, используя регулярное выражение. Вот что у меня есть на данный момент:
<p:inputText id = "inNum" maxlength = "2">
<p:keyFilter regEx = "/^[1-9][0-9]?$/" preventPaste = "true" />
</p:inputText>
Ввод принимает большинство желаемых чисел, кроме тех, которые имеют 0 в качестве второй цифры (10, 20, 30,..).
Не могу понять, почему так. Я также проверил это регулярное выражение с помощью онлайн-тестеров, и, похоже, все в порядке.
Что мне здесь не хватает?
@WiktorStribiżew Я уже думал об этом, поэтому попробовал с атрибутом inputRegEx
. В документации для inputRegEx
указано: Определяет регулярное выражение, которое следует использовать для проверки всего входного текстового содержимого. Вроде так можно ввести 10, 20, 30... но есть еще одна проблема. Как только я вхожу, например. 10, а затем я пытаюсь очистить ввод, первая цифра (1 в моем случае) не может быть очищена. Не знаю почему, но это не то поведение, которое я хочу.
Да, тогда вам нужно сделать их оба (последовательно) необязательными. Попробуйте inputRegEx='/^(?:[1-9][0-9]?)?$/'
@WiktorStribiżew это именно то, что я искал, большое спасибо. Не стесняйтесь опубликовать свое решение в качестве ответа на мой вопрос.
Отвечает ли это на ваш вопрос? Использование регулярного выражения с p:keyFilter
@JasperdeVries да, частично, я понял, что должен использовать атрибут inputRegEx. Ответ Виктора, наконец, решил мою проблему с ограничением ввода - также мое регулярное выражение было неполным.
Атрибут regEx
проверяет только одно нажатие клавиши с помощью своего регулярного выражения, а поскольку шаблон ^[1-9][0-9]?$
требует ненулевой цифры в качестве первого символа, он позволит использовать только цифру от 1 до 9. Вам нужно проверить все входное значение с помощью inputRegEx
атрибут.
Вы можете использовать
inputRegEx='/^(?:[1-9][0-9]?)?$/'
Поскольку вы используете регулярное выражение для ввода в режиме реального времени, вам нужно убедиться, что даже пустая строка проходит проверку, поэтому все подшаблоны должны быть необязательными, а поскольку вы разрешаете только ненулевую цифру в начале, подшаблоны должны быть последовательно необязательно.
Подробности
^
- начало строки(?:[1-9][0-9]?)?
- необязательная последовательность
[1-9]
- ненулевая цифра[0-9]?
- необязательная цифра$
- конец строки.
Это просто означает, что вы можете проверить только одно нажатие клавиши с помощью регулярного выражения, и, поскольку для этого требуется ненулевая цифра в качестве первого символа, она позволит использовать только цифру от 1 до 9. Вам нужно проверить все входное значение с помощью регулярного выражения .