2

-999 と 999 の間の数値のみを入力できるように、TextFormField でフラッターに正規表現を使用したいと考えています。式をテストしたところ、すべてが希望どおりに機能しましたが、「なぜ書けないのかわかりません」 -」を 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]部分にはゼロ以外の数字が必要です。さらに、$最後にアンカーがありませんでした。正規表現は 3 桁目以降に一致する可能性があります。

単一の を挿入できるようにする-には、数字の一致部分をオプションにする必要があります。

したがって、使用できます

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

正規表現のデモを参照してください。詳細

  • ^- 文字列の開始
  • -?- オプションの-文字
  • (?:[1-9][0-9]{0,2})?- オプションのシーケンス
    • [1-9]- ゼロ以外の数字
    • [0-9]{0,2}- 任意の 0、1、または 2 桁
  • $- 文字列の終わり。
于 2021-12-15T22:04:17.063 に答える