Flutter TextFormField inputFormatters 正则表达式(RegEx)不起作用

Flutter TextFormField inputFormatters regular expression (RegEx) doesn't work

我想在我的 TextFormField 上有一个正则表达式,只能输入 -999 和 999 之间的数字。当我测试表达式时,一切正常想写,不知道为什么TextFormField里不能写“-”。 最大数字和数字 不应该以 0 开头工作 非常好,但我一直试图添加一个减号它不起作用。 如果有任何帮助,我将不胜感激!

 TextFormField(
              decoration: kTextFieldDecoration,
              style: kCustomNumberBoxTextStyle,
              keyboardType: TextInputType.numberWithOptions(signed: true),
              textAlign: TextAlign.center,
              initialValue: number.toString(),
              inputFormatters: [
                FilteringTextInputFormatter.allow(
                    RegExp(r'^-?[1-9]([0-9]{1,2})?')),
              ],
              onChanged: (String newValue) {
                if (newValue != "") {
                  setState(() {
                    number = int.parse(newValue);
                  });
                  widget.onTap(int.parse(newValue));
                }
              },
            ),

您的 ^-?[1-9]([0-9]{1,2})? 正则表达式使初始连字符可选,这很好,但是 [1-9] 部分 需要 一个非零数字。此外,您错过了最后的 $ 锚点,正则表达式可以匹配第三个数字之后的任何内容。

为了能够插入单个-,您需要将数字匹配部分设为可选。

因此您可以使用

^-?(?:[1-9][0-9]{0,2})?$

regex demo详情:

  • ^ - 字符串开头
  • -? - 一个可选的 - 字符
  • (?:[1-9][0-9]{0,2})? - 一个可选的序列
    • [1-9] - 非零数字
    • [0-9]{0,2} - 任意零、一位或两位数字
  • $ - 字符串结尾。