Шаблон [-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?
допускает ,
или .
в начале, потому что [-+]?
и [0-9]*
могут соответствовать пустым строкам из-за ?
(один или ноль вхождений) и *
(нольили более вхождений), а затем [.,]
соответствует одному вхождению .
или ,
.Кроме того, если используемый вами метод не привязывает шаблон по умолчанию, вам также понадобятся привязки ^
и $
вокруг шаблона.
Я предлагаю исправить это с помощью
"^[-+]?[0-9]+([.,][0-9]+)?([eE][-+]?[0-9]+)?$"
^ ^^^^^^^^^^^^^^ ^
Обратите внимание, что вам не нужно экранировать точку внутри класса символов, [.]
всегда соответствует только точечному символу.
* [0-9]+([.,][0-9]+)?
соответствует 1+ цифрам, а затем необязательная последовательность .
или,
, за которыми следуют 1+ цифр.