Я бы просто применил ваш шаблон к этому:
\d*(?:\.\d+)?
Демо
Это, кажется, охватывает все ваши случаи использования положительного десятичного числа,Десятичный компонент является необязательным, это означает, что шаблон охватывает целые числа.Десятичные числа покрыты, а также числа, которые имеют только десятичный компонент.
Обратите внимание, что вам может потребоваться окружить шаблон якорями ^$
, в зависимости от используемого вами API.
Редактировать:
Если вам также необходимо убедиться, что пустая строка не совпадает, то мы можем добавить заглядывание в вышеприведенный шаблон:
(?=.)\d*(?:\.\d+)?
Демо