Вы должны использовать это:
^[0-9]+(\.(50*|[0-4][0-9]*))?$
Если вы также хотите дроби, такие как .2
вместо 0.2
, используйте это:
^[0-9]*(\.(50*|[0-4][0-9]*))?$
Разъяснения:
^ beginning of the string
[0-9]* repeat 0 or more digits
(
\. match the fraction point
(
50* match .5, or .5000000 (any number of zeros)
| or
[0-4][0-9]* anything smaller than .5
)
)? anything in this parenthesis is optional, for integer numbers
$ end of the string
Ваша версия, [0-9]+(\.[0-5])?
, к сожалению, не работает, потому что, например, /[0-9]+(\.[0-5])?/.test("0.8")
возвращает true.