keyboardType: TextInputType.number,
                inputFormatters: [
                  WhitelistingTextInputFormatter(
                      RegExp("^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*\$"))
                ],
              ),

我在TextFormField中使用此设置,并使用了我从另一篇SO帖子中获取的正则表达式。在regex101.com上测试似乎还不错,但是我无法使用此regexp在表单上进行任何输入。

我使用regex的目标是获得两个十进制正浮点数。

Regex greater than zero with 2 decimal places

最佳答案

您可以使用

RegExp(r"^\s*\d*(?:\.\d{1,2})?\s*$")
       ^                         ^

或者,如果您想保留“字符串中至少一个非零数字”的要求(正如您尝试过的正则表达式所暗示的那样):
RegExp(r"^(?=.*[1-9])\s*\d*(?:\.\d{1,2})?\s*$")

这里的重点是:
  • 您应使用原始字符串文字进行正则表达式转义,以使用单个反斜杠
  • $仅在不进行转义且在方括号中时才是字符串 anchor 的结尾
  • 为了提高性能,必须将前行放在^之后。

  • 模式详细信息
  • ^-字符串
  • 的开始
  • (?=.*[1-9])-除换行符以外的任何0+字符后,必须有一个非零数字
  • \s*-0+空格
  • \d*-0 +数字
  • (?:\.\d{1,2})?-的可选序列
  • \.-点
  • \d{1,2}-1或2位数字
  • \s*-0+空格
  • $-字符串结尾。
  • 关于regex - 在白名单中添加2个十进制正数配置后,TextField不接受输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56082799/

    10-10 18:05