在白名单中添加2个十进制正数配置后,TextField不接受输入

时间:2019-05-10 18:08:31

标签: regex dart flutter

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

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

我使用正则表达式的目标是获得两个十进制正浮点数。

Regex greater than zero with 2 decimal places

1 个答案:

答案 0 :(得分:0)

您可以使用

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

或者,如果您想保留“字符串中至少一个非零数字”的要求(如正则表达式所提示的那样):

RegExp(r"^(?=.*[1-9])\s*\d*(?:\.\d{1,2})?\s*$")

这里的重点是:

  • 对于正则表达式转义,您应该使用原始字符串文字,以使用单个反斜杠
  • $仅在不转义且不在方括号中时才是字符串锚点的结尾
  • 提前行必须放在^之后才能获得更好的性能。

模式详细信息

  • ^-字符串的开头
  • (?=.*[1-9])-除换行符之外的任何0+字符后都必须有一个非零数字
  • \s*-超过0个空格
  • \d*-0位数以上
  • (?:\.\d{1,2})?-的可选序列
    • \.-一个点
    • \d{1,2}-1或2位数字
  • \s*-超过0个空格
  • $-字符串的结尾。