2

我想在我的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));
                }
              },
            ),
4

1 回答 1

0

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

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

您可以因此使用

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

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • -?- 一个可选-字符
  • (?:[1-9][0-9]{0,2})?- 一个可选的序列
    • [1-9]- 一个非零数字
    • [0-9]{0,2}- 任何零、一位或两位数
  • $- 字符串结束。
于 2021-12-15T22:04:17.063 回答