防止用户在颤振的文本字段中已存在小数点后单击数字键盘中的"."



我有一个TextField,我用它来获得我的扑动应用程序的双重。TextField使用数字键盘。

child: TextField(
style: TextStyle(color: Colors.white),
inputFormatters: [FilteringTextInputFormatter.allow(new RegExp("[0-9.]"))],
controller: controller,
keyboardType: TextInputType.number,
decoration: textDecorator,
onSubmitted: () {
//Some Action
},
),

我使用了inputformatter来防止用户点击其他标点符号,如代码所示。我的问题是我可以输入像"23.45.3"这样的东西。也就是有两个。不允许使用的符号。最理想的情况是在"23"之后,如果用户试图点击"23"。再次从键盘上,它应该被禁用。任何关于如何做到这一点的帮助是感激的。

这个正则表达式应该可以解决您的问题/^-?(?:d*.d+|d+.?)$/

您正在使用的正则表达式匹配数字或数字的任何单个实例,因此只要输入中的任何这些实例都存在,那么格式化程序将允许它。相反,您可以尝试这样做:

FilteringTextInputFormatter.allow(new RegExp("^-?([1-9]d+|0)(.d+)?$"))
  • ^$表示输入行的开始和结束,这强制整个字符串匹配正则表达式
  • -?表示第一个字符可以是0或-符号的1个实例。如果你不想要负数
  • ,你可以删除这个。
  • ([1-9]d+|0)允许以非0 ([1-9]d+)或单个0 (|0)开头的任何数字字符。如果您可以使用多个前导0,则可以将此部分设置为d+
  • 最后一部分,(.d+)?允许小数点(.,用转义,因为.单独是正则表达式中的一个特殊字符)后面至少跟着一个数字(这防止了像3.这样小数点后面没有字符的数字)。?表示此模式最多只能出现一次,防止允许超过一个小数点。

我还没有像在输入格式化器中那样实际测试过,我预计在输入小数点时可能会出现问题,因为regex强制在小数点后面跟一个数字。如果确实是这种情况,您可以尝试使用"^-?([1-9]d+|0)(.d*)?$"代替(最后的?->*),但如果你有问题的话,你必须自己做一些进一步的验证,以防止在提交时出现3.这样的数字。

相关内容

最新更新