正则表达式最多允许 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)$
或者首先匹配一个数字,然后匹配一个可选点和 2 个数字的 2 个变体,或者一个数字、可选点和一个数字:
^\d(?:\.?\d\d|\d\.?\d)$
你可以试试这个:
(?<!\.)\b\d\.?\d\.?\d\b
我已经用你的所有案例进行了测试,效果很好。
我尝试通过 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)$
或者首先匹配一个数字,然后匹配一个可选点和 2 个数字的 2 个变体,或者一个数字、可选点和一个数字:
^\d(?:\.?\d\d|\d\.?\d)$
你可以试试这个:
(?<!\.)\b\d\.?\d\.?\d\b
我已经用你的所有案例进行了测试,效果很好。