You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中TextFormField的浮点数输入验证方案咨询

Flutter TextFormField 成本金额浮点数验证实现

直接上符合需求的验证函数,你可以直接放到项目里用:

String? costValidator(String? value) {
  // 空输入处理(如果是可选字段,可删掉这段或修改提示)
  if (value == null || value.isEmpty) {
    return '请输入成本金额';
  }

  // 禁止输入逗号
  if (value.contains(',')) {
    return '金额不能包含逗号';
  }

  // 限制最多一个小数点
  final dotCount = value.split('.').length - 1;
  if (dotCount > 1) {
    return '只能有一个小数点';
  }

  // 解析并验证数值合法性
  final num? parsedNum = double.tryParse(value);
  if (parsedNum == null) {
    return '请输入有效数字';
  }
  if (parsedNum < 0) {
    return '金额不能是负数';
  }
  if (parsedNum >= 100) {
    return '金额不能超过99.99';
  }

  // 所有验证通过,返回null表示无错误
  return null;
}

验证逻辑拆解

  • 空输入控制:按需调整,要是成本是必填项就保留这段,可选字段的话直接删掉即可
  • 逗号拦截:直接检查输入内容里是否包含逗号,不符合就给出提示
  • 小数点限制:通过分割字符串统计小数点个数,超过1个直接报错
  • 数值合法性校验:
    • 用double.tryParse过滤掉所有非数字内容(比如字母、乱码等非法输入)
    • 确保输入为非负数
    • 限制金额不超过百位(也就是小于100,最大合法值为99.99)

使用示例

把这个验证函数绑定到TextFormField上:

TextFormField(
  keyboardType: TextInputType.number,
  decoration: const InputDecoration(
    labelText: '项目成本',
    hintText: '示例:1.99 或 .99',
  ),
  validator: costValidator,
  // 可选:开启用户输入时的实时验证
  autovalidateMode: AutovalidateMode.onUserInteraction,
)

测试边界情况

  • 合法输入:0、0.99、99、99.99、.99
  • 非法输入:-1(负数)、100(超百位)、1,23(含逗号)、1.2.3(多小数点)、abc(非数字)

内容的提问来源于stack exchange,提问作者user17281101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:41:07