Я использую регулярное выражение отсюда
TextFormField(
keyboardType: TextInputType.datetime,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$')),
],
)
Этот RegExp
не позволяет мне ничего вводить. Тогда каким должно быть правильное RegExp
для времени в формате HH:MM
для TextFormField?
В регулярном выражении FilteringTextInputFormatter.allow
вам нужно убедиться, что шаблон может соответствовать одному вводу char.
Итак, здесь вам нужно использовать
^(?:[01]?\d|2[0-3])(?::(?:[0-5]\d?)?)?$
См. демонстрация регулярных выражений. Подробности:
^
- начало строки(?:[01]?\d|2[0-3])
- необязательный 0
или 1
, а затем любая одна цифра, или 2
, а затем цифра от 0
до 3
(?::(?:[0-5]\d?)?)?
— необязательная незахватывающая группа, соответствующая одному или нулю вхождений
:
- двоеточие(?:[0-5]\d?)?
- необязательная последовательность цифр от 0
до 5
, а затем необязательная цифра$
- конец строки.@iDecode Я не думаю, что он особенно уникален. Просто убедитесь, что ваш шаблон соответствует одному входу char. r'^(?:[+0]9?)?[0-9]{0,12}$'
Аналогичный вопрос опубликован здесь. Хотелось бы увидеть ваш ответ, спасибо :)