我试图让dart验证我的用户将在我的表单中输入的浮点数。我从这个SO线程(Regular expression for floating point numbers)获取了关于浮点数的Regex表达式的指导(例如,12.830),并在我的flutter应用程序中尝试了它。
new TextFormField(
controller: amt_invested,
keyboardType: TextInputType.number,
inputFormatters: [WhitelistingTextInputFormatter(new RegExp(r'[+-]?([0-9]*[.])?[0-9]+'))],
decoration: const InputDecoration(
filled: true,
fillColor: CupertinoColors.white,
border: const OutlineInputBorder(),
labelText: 'Amount invested',
prefixText: '\R',
suffixText: 'ZAR',
suffixStyle:
const TextStyle(color: Colors.green)),
maxLines: 1,
validator: (val) => val.isEmpty ? 'Amount is required' : null,
),
然而,正如SO线程所说的那样,正则表达式阻止我进入浮点数的全停。如何让它正常工作?
答案 0 :(得分:1)
如果您要匹配@IBOutlet weak var TheCharacter: UIImageView!
在这里,您确实希望匹配123.
,因为它是前往123.
途中的垫脚石。
因此,将您的RegExp更改为123.45
当您使用数字小键盘时,您可能可以免除前导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 '));
}