regex Flutter中3位小数的正则表达式

zd287kbt  于 2023-08-08  发布在  Flutter
关注(0)|答案(1)|浏览(139)

我想实现以下目标:
小数点前3位,小数点后1位(同时检查添加的起始3位数不应以0作为第一位)

  • 正确:230.8、179.0、200.0等
  • 不正确:012.4、002.5、12。、12.22、1.4、1.222

现在我有这个

TextFormField(
    focusNode: participantHeightFocus,
    // inputFormatters: [FilteringTextInputFormatter.digitsOnly],
    inputFormatters: [
      FilteringTextInputFormatter.allow(
          RegExp(r'^\d+\.?\d*$')),
    ],
    validator: (value) {
      if (value!.isEmpty) {
        return "Height is required";
      } else if (!RegExp(r'^\d+(\.\d+)').hasMatch(value)) {
        return "Please enter the height in cm (e.g., 170.0 cm)";
      }
      return null;
    },
    controller: participantHeight,
    onChanged: (_) => calculateBMIAndUpdate(),

    decoration: InputDecoration(
      hintText: "Participant Height (*)",
      labelText: "Participant Height (*)",
      labelStyle: const TextStyle(fontSize: 20),
      border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(5)),
    ),
  ),

字符串
它显示错误,但让我输入小数点前的许多数字和小数点后的许多数字,它还允许我以0开始我的数字,这是错误的

bmvo0sr5

bmvo0sr51#

试试这个:

r'^[1-9]\d{2}\.\d$'

字符串
如果您希望小数点和数字是可选的(如果例如170.0也可以写成170),稍微调整一下:

r'^[1-9]\d{2}(\.\d)?$'


说明:

  • ^匹配字符串的开头
  • [1-9]匹配除0以外的所有数字
  • \d{2}匹配两个数字
  • .\d匹配点和一个数字
  • $匹配字符串的结尾
  • (...)?使parantheses中的表达式成为可选的

相关问题