Прокрутите вниз на несколько строк в другом потоке до раздела , если хотите сопоставить 123.
Здесь вы хотите соответствовать 123.
, поскольку это ступенька на пути к 123.45
.
Итак, измените свой RegExp на new RegExp(r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$');
Поскольку вы используете цифровую клавиатуру, вы, вероятно, можете обойтись без ведущего ^
и трейлинг $
Этот пример
main() {
RegExp re;
re = new RegExp(r'[+-]?([0-9]*[.])?[0-9]+');
print(test(re, '1234'));
print(test(re, '1234.'));
print(test(re, '1234.5'));
print(test(re, '1234a'));
print(test(re, '1234..'));
print('---');
re = new RegExp(r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$');
print(test(re, '1234'));
print(test(re, '1234.'));
print(test(re, '1234.5'));
print(test(re, '1234a'));
print(test(re, '1234..'));
print(test(re, '1234 '));
}
выходы
true
false <- this causes your problem
true
false
false
---
true
true
true
false
false
false