有没有办法自动删除或避免文本字段中的前导和尾随空格?

问题描述 投票:0回答:3

我正在创建一个电子邮件字段,我想避免或自动删除其中的前导空格和尾随空格。

我尝试使用

myTextFieldController.addListener(() { myTextFieldController.text = myTextFieldController.text.trim(); });

但是一旦用户键入任何字符,它就会将光标移动到开头。

还有其他办法吗?

您认识用户,所以我需要将其删除,否则他们将永远留在那里尝试验证该字段。

当然我知道我可以在验证之前做到这一点,但我想知道是否有更强大的方法。

flutter controller textfield
3个回答
14
投票

您可以使用

inputFormatters
TextField
属性。 它不允许用户在文本字段中添加空格。

TextField(
        inputFormatters: [
                BlacklistingTextInputFormatter(RegExp('[ ]')),
              ]
);

更新: 对于 1.20.* 以上的 flutter 版本,请改用此

TextField(
            inputFormatters: [
                    FilteringTextInputFormatter.deny(RegExp('[ ]')),
                  ]
    );

2
投票

如果您同意用户在这些空格中输入内容,但只是不想将它们传递给您的处理方法,您可以使用

validator
向用户显示错误消息(“无前导/尾随”)允许空格')或者您可以在处理之前从结果字符串中删除它。如果您想采用验证器方法,也可以使用
Regex
表达式来验证电子邮件。您可以使用
inputFormatter
禁用空格,但请记住,这将禁用
TextField
中的所有空格,这对于电子邮件字段来说不应该是问题,但可能会在其他地方(姓名字段、地址字段)引起问题等)


0
投票
  1. 用于限制尾随空格和前导空格
TextField(
  controller: yourTextController,
  inputFormatters: [
    FilteringTextInputFormatter.deny(RegExp(r'^\s+|\s+$')),
  ],
)
  1. 仅限制前导空格
TextField(
  controller: yourTextController,
  inputFormatters: [
    FilteringTextInputFormatter.deny(RegExp(r'^\s+')),
  ],
)
© www.soinside.com 2019 - 2024. All rights reserved.