正则表达式最多允许 3 个数字和一个点

Regex allow max 3 numbers and one dot

我尝试通过 javascript 捕获字段的输入。

我最多需要 3 个数字和一个点。

我试过这个正则表达式:[^\d{0,3}.{0,1}\d{0,3}]

但它不太有效,我真的不知道如何全局获取数值,所以它实际上最多 3 个数字。

333   //ok
333   //ok
33.1  //ok
3.33  //ok
3.3.  //not ok
3.333 //not ok
3333. //not ok
3..   //not ok
.     //not ok

希望有人能在这里给我提示。

我的正则表达式非常糟糕,但想出了下面这样的东西。可能有更优雅的方法,但是....

^\d{0,3}$|^\d{2}[.]\d{1}$|^\d{1}[.]\d{1,2}$

适用于 MAX 3 个数字,因此 3 和 33 也可以

对于提交(最终)验证,您可以使用

^(?=.{3,4}$)\d+(?:\.\d+)?$

regex demo。它匹配

  • ^ - 字符串开头
  • (?=.{3,4}$) - 这要求字符串只有三个或四个字符
  • \d+(?:\.\d+)? - 一位或多位数字,然后是可选的 . 和一位或多位数字。由于 \d\.\d 必须至少匹配一次,因此最小限制为 3 是合理的,并且由于只能匹配一个点,因此 \d+ 中的任何一个都可以匹配一个或两个数字,但总共只有三个
  • $ - 字符串结尾。

对于实时输入文本验证,您可以使用

^(?:\d{1,3}|\d(?:\d?\.\d?|\.\d{2}))$

参见regex demo详情:

  • ^ - 字符串开头
  • (?: - 组开始:
    • \d{1,3} - 一位、两位或三位数字
  • | - 或者
    • \d - 一个数字
    • (?:\d?\.\d?|\.\d{2}) - 非捕获组匹配
      • \d?\.\d? - 一个可选数字,一个 . 然后一个可选数字
      • | - 或
      • \.\d{2} - . 然后两位数
  • ) - 小组结束
  • $ - 字符串结尾。

您还可以匹配非捕获组中的所有 3 个变体:

^(?:\d{3}|\d\.\d\d|\d\d\.\d)$

Regex demo

或者首先匹配一个数字,然后匹配一个可选点和 2 个数字的 2 个变体,或者一个数字、可选点和一个数字:

^\d(?:\.?\d\d|\d\.?\d)$

Regex demo

你可以试试这个:

(?<!\.)\b\d\.?\d\.?\d\b

我已经用你的所有案例进行了测试,效果很好。