限制特殊字符输入颤动

时间:2018-05-21 05:17:24

标签: flutter

我有一个只接受数字作为输入的TextField。 出现的键盘允许输入以下字符:“ - (连字符),(逗号)。(句点)和空格”。如何阻止用户输入除句点以外的所有内容。

child: new TextField(
  controller: _controller,
  maxLengthEnforced: true,
  keyboardType: TextInputType.number,
  maxLength: 4, //9999 upper limit
  ), //TextField

我尝试使用RegExp来获取_controller文本,删除字符并将其放回到字段中而没有任何运气。

...//Add Listener to _controller
_controller.addListener(restrictCharacters);
...

//Listener
void restrictCharacters(){
  RegExp regexp = new RegExp(
    r"^|\-|\,|\ ",
    caseSensitive: false,
    multiLine: false,);
  String text = _controller.text;
  String chng = text.replaceaLL(regExp,"");
  _controller.text = chng;
}

应用时,光标移动到开头,字段保持 - (连字符)例如。

9 个答案:

答案 0 :(得分:18)

在您的TextInputField()中包括该参数

inputFormatters: [new WhitelistingTextInputFormatter(RegExp("[0-9]")),],

如果您只允许使用字母,则正则表达式为

inputFormatters: [new WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),],

答案 1 :(得分:7)

将此添加到您的TextField中以获取字母和数字

inputFormatters: [new  WhitelistingTextInputFormatter(RegExp("[a-zA-Z0-9]")),],

答案 2 :(得分:5)

WhitelistingTextInputFormatter已过时。您应该使用FilteringTextInputFormatter.allow

inputFormatters: [ FilteringTextInputFormatter.allow(RegExp("[a-zA-Z]")), ]

FilteringTextInputFormatter.deny代替BlacklistingTextInputFormatter

答案 3 :(得分:3)

如果要添加 double ,还可以使用以下格式:

inputFormatters: [new FilteringTextInputFormatter.allow(RegExp("[0-9.]")),],

答案 4 :(得分:3)

Dart 2.13+,Flutter 1.27+

 inputFormatters:[FilteringTextInputFormatter.allow(RegExp('[a-zA-Z0-9]'))]

答案 5 :(得分:2)

BlacklistingTextInputFormatter添加TextField

  inputFormatters: [
    new BlacklistingTextInputFormatter(new RegExp('[\\.]')),
  ],

仅删除.如果您想要禁止,请说.,将其更改为

  inputFormatters: [
    new BlacklistingTextInputFormatter(new RegExp('[\\.|\\,]')),
  ],

答案 6 :(得分:1)

对于那些需要在文本字段中使用money格式的人:

仅使用:"=m" (逗号)"m" (句点)

并阻止符号:, (连字符,减号或破折号)

以及. (空白)

在您的TextField中,只需设置以下代码:

-

simbols 连字符空格仍会出现在键盘中,但会被阻止。

答案 7 :(得分:0)

如果您还想在名称中包括英语和梵文 然后遵循此正则表达式模式 我为带有允许空间的英文字母和梵文字母创建了这种模式

 inputFormatters: [ WhitelistingTextInputFormatter(RegExp("[a-zA-Z \u0900-\u097F]")),
                    LengthLimitingTextInputFormatter(30),
                  ],

答案 8 :(得分:0)

您可以使用转义序列拒绝特殊字符 或从Google获得任何转义序列

示例:

inputFormatters: [
                    FilteringTextInputFormatter.deny(
                      RegExp("[a-zA-Z0-9\u0020-\u007E-\u0024-\u00A9]"),
                    ),
                    
                  ],