Квантор *
означает «соответствует 0 или больше». В вашем случае «a» возвращает 0 совпадений, поэтому регулярное выражение все еще успешно. Вы, вероятно, хотели:
([0-9.]+)
Квантор +
означает «совпадение 1 или более», поэтому он не работает на нечисловых входах и не возвращает совпадений. Быстрый тест регулярное выражение показывает:
input result
----- ------
[empty] No matches
a No matches
. 1 match: "."
20.15 1 match: "20.15"
1 1 match: "1"
1.1.1 1 match: "1.1.1"
20. 1 match: "20."
Похоже, у нас есть несколько ложных срабатываний, давайте пересмотрим регулярное выражение следующим образом:
^([0-9]+(?:\.[0-9]+)?)$
Теперь мы получаем:
input result
----- ------
[empty] No matches
a No matches
. No matches
20.15 1 match: "20.15"
1 1 match: "1"
1.1.1 No matches: "1.1.1"
20. No matches
прохлады.