Flutter TextField TextInputFormatter在输入不允许的字符时擦除整个字符串



所以我有正常的TextField,如下所示:

TextField(
autofocus: true,
controller: _textController,
keyboardType: TextInputType.text,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(
r'^[A-zÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿs*&^%0-9,.-:)(]+$')),
],
style: TextStyle(
color: Colors.amber,
),
decoration:
InputDecoration(fillColor: Colors.transparent),
maxLines: null,
),

一切都很好,直到我写了不允许进入字段的字符,然后整个字符串就消失了。我深入研究了它,发现FilteringTextInputFormatter.allow有一个名为replacementString的属性,默认情况下它是空字符串。现在的问题是,我应该如何处理这个问题,因为如果我向文本控制器添加一个监听器并监视更改,我不知道用户是删除了文本还是输入了不允许的字符。据我所知。

有没有什么方法可以防止用RegEx输入字符,我不想删除文本,我只想防止输入不允许的字符。有没有某种方法可以在没有监听器或其他进行这种检查的方法的情况下实现这一点?

所以解决方案很简单,RegEx的末尾不应该有$sign,我回答这个问题只是为了防止有人觉得这很有用。

取而代之的是:

FilteringTextInputFormatter.allow(RegExp(
r'^[A-zÀs*&^%0-9,.-:)(]+$'))

它需要这样,以获得适当的功能:

FilteringTextInputFormatter.allow(RegExp(
r'^[A-zÀs*&^%0-9,.-:)(]+'))

最新更新