我有一个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.
这样的数字。