flutter 输入格式化程序不允许值,而它应该

xvw2m8pv  于 2023-02-09  发布在  Flutter
关注(0)|答案(2)|浏览(119)

我的TextField上有以下输入格式化程序

inputFormatters: [
     FilteringTextInputFormatter.allow(
         RegExp(r'^\+[0-9]+'),
     ),
 ],

而且它不允许我在电话号码的开头输入一个+,所以我决定在dartpad上测试一下。

void main() {
  final regex = RegExp(r'^\+[0-9]+');
  print(regex.hasMatch('+310612345678'));
}

结果为真。我哪里做错了?

hfsqlsce

hfsqlsce1#

啊...你发现了为什么大多数复杂的过滤器注定要失败。
这样想吧...要输入“+123”,你必须先输入“+"。但是“+”是你的过滤器不允许的!即使是这样,这也意味着你可以只提交一个“+"!
所以解决方案是把它作为验证正则表达式,如果你坚持的话,你可以在每次修改时运行验证检查,而不是在提交时,这会给予你一个空字符串或+的错误,但是最终你可以输入+123作为有效的。

hxzsmxv2

hxzsmxv22#

如果您希望在输入中允许使用+号,可以将正则表达式修改为^[+0 -9]+。此正则表达式模式指定输入必须以+或数字开头,后跟一个或多个数字。以下是更新后的代码:

inputFormatters: [
 FilteringTextInputFormatter.allow(
     RegExp(r'^[\+0-9]+'),
 ),

],
使用此格式,输入字段将允许+号和数字,并阻止任何其他字符。

相关问题