Как я уже сказал в комментариях - будет учитываться ваша первая ненулевая цифра, затем вы добавите еще две - теперь будут разрешены трехзначные числа, такие как 915
. Чтобы решить эту проблему, используйте регулярное выражение ( с вашими тестовыми примерами ):
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.[05])?$
Я использую отрицательный прогноз (?!0)
, чтобы убедиться, что первая цифра не является нулем, а затем просто требуется требуемое количество цифр. Это также позволяет 0.5
и тому подобное через |0
дизъюнкцию. Если вы предпочитаете .5
, это будет так:
^[+-]?(?!0)\d{,2}(?:\.[05])?$
Если вы хотите запретить 3.0
(разрешено вашими правилами) и разрешить только 3
(как вы подразумеваете в примерах), замените последнюю часть:
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.5)?$
Однако, это гораздо менее читабельно, чем @ Arkku's nice Float(number)
; используйте регулярные выражения, если они вам действительно нужны.