Это регулярное выражение должно выполнять вашу работу.
^(?:[1-9][0-9]*|0)(?:\.[0-9]+)?$
Демо
^
- начало строки
(?:
- начало группы без захвата
[1-9][0-9]*
- соответствует номеру, не начинающемуся с нуля
|0
- Или позволяет сопоставить только ноль, чтобы разрешить такие числа, как 0.3423434
или 0.1
(?:\.[0-9]+)?
- Опционально допускается десятичная часть в числе
$
- конец строки
Редактировать: на основании предложения Аллана использовать \d
вместо [0-9]
В случае, если ваш ввод содержит только английские цифры или если вы хотите совпадать только с английскими цифрами, использование [0-9]
должно быть предпочтительным по причинам, таким как повышение производительности и широкая поддержка его в механизмах регулярных выражений.
Но если ваш ввод содержит цифры из других языков, таких как хинди १
२
и т. Д., И вы хотите сопоставить любые цифры, то вместо [0-9]
следует отдавать предпочтение
\d