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}
- 任意零、一位或两位数字
$
- 字符串结尾。
我想在我的 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}
- 任意零、一位或两位数字
$
- 字符串结尾。