regex 文本表单字段中的正则表达式

qacovj5a  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(145)

我试图只允许数字和点的文本表单字段.
我有类似的东西

WhitelistingTextInputFormatter(RegExp("\d*[.]\d*"))

但是不起作用,所以:有没有人知道怎么会只允许数字和点?

6qftjkof

6qftjkof1#

由于WhitelistingTextInputFormatter在Flutter 1.20中被弃用,因此FilteringTextInputFormatter可以用于:
TextInputFormatter,防止插入符合(或不符合)特定模式的字符。
在新TextEditingValue中找到的筛选字符示例将替换为默认为空字符串的replacementString
由于此格式化程序只从文本中删除字符,因此它尝试将现有的TextEditingValue.selection保留为删除字符后的值。
使用示例:

TextField(
 keyboardType: TextInputType.numberWithOptions(decimal: true),
 inputFormatters: <TextInputFormatter>[
      FilteringTextInputFormatter.allow(RegExp(r'^\d+(?:\.\d+)?$')),
  ], 
),

传统答案

WhitelistingTextInputFormatter“创建一个格式化程序,该格式化程序仅允许插入列入白名单的字符模式”。这意味着您的模式应仅匹配任何1位数或1个点。
此外,如果要在正则表达式转义中使用单个反斜杠,则需要使用原始字符串文字。
用途

WhitelistingTextInputFormatter(RegExp(r"[\d.]"))

请注意,如果要验证整个输入 * 序列 *,则需要定义validator: validateMyInput,然后添加

String validateMyInput(String value) {
    Pattern pattern = r'^\d+(?:\.\d+)?$';
    RegExp regex = new RegExp(pattern);
    if (!regex.hasMatch(value))
      return 'Enter Valid Number';
    else
      return null;
  }

改编自Form Validation in Flutter

相关问题