Вы можете использовать
RegExp(r"^\s*\d*(?:\.\d{1,2})?\s*$")
^ ^
Или, если вы хотите сохранить требование «хотя бы одна ненулевая цифра в строке» (как на это указывает правило, которое вы пробовали):
RegExp(r"^(?=.*[1-9])\s*\d*(?:\.\d{1,2})?\s*$")
Дело в том, что:
- Вы должны использовать необработанный строковый литерал для экранирования регулярных выражений для работы с одиночной обратной косой чертой
$
- конец строкипривязка только в том случае, если она не экранирована и не заключена в квадратные скобки - Для повышения производительности указатель должен быть поставлен после
^
.
Детали шаблона
^
- начало строки (?=.*[1-9])
- после любых символов 0+, кроме символов переноса строки, должна быть ненулевая цифра \s*
- 0+ пробелов \d*
- 0+ цифр (?:\.\d{1,2})?
- необязательная последовательность \.
- точка \d{1,2}
- 1 или 2 цифры
\s*
- 0+ пробелов $
- конец строки.