我要求将数字限制为3.00到100.00 我用下面的表达式
^([3-9]|[1-9][0-9]|100)+(\.\d{1,2})?$
上述表达式的问题在于,它允许100.01到100.99,应该限制。它也允许310到399,需要限制。
我用了另一种表达方式相同的味道
^([3-9]|[1-9][0-9]|100.00)+(\.\d{1,2})?$
工作正常,但是我们需要输入100.00来传递正则表达式,而不是100。
有什么办法可以达到预期的效果吗?
答案 0 :(得分:4)
您可以尝试与此伴侣
^(?:100(?:\.0+)?|(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?)$
说明
^
-锚点代表字符串的开头。(?:100(?:\.0+)?)
-这将匹配100、100.0、100.00(任意数量的十进制零)。|
-替代方法与逻辑OR相同。(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?)
-这将匹配3.00到99.99之间的任何数字建议
如果您不在正则表达式中的任何其他地方再次使用该组,则始终使用非捕获组。
答案 1 :(得分:4)
与最后的100
交替使用时,请对\.\d?[1-9]
使用负前行,以确保小数位(如果有的话)只有0。
由于组末尾的+
,您的第一个模式还可以匹配可选小数点前的许多个重复的数字(例如333和101010),因此最好删除{ {1}},如果您只想匹配3到100。
+
https://jsfiddle.net/8d06f7y4/
要允许前导零,请在^(?:[3-9]|[1-9][0-9]|100(?!\.\d?[1-9]))(?:\.\d{1,2})?$
^^^^^^^^^^^^^^
之后添加0*
:
^
答案 2 :(得分:2)
与此有关的问题:^([3-9]|[1-9][0-9]|100)+(\.\d{1,2})?$
是,它还在第一个块中允许使用100(该块负责允许整数)。
在您的情况下,您需要使用类似以下的内容:^100\.00$|([3-9]|[1-9][0-9])+(\.\d{1,2})?$
(示例here)。
此表达式将尝试整体匹配100.00
(这是您的上限),或者匹配3.00
到99.99
之间的任何数字。
答案 3 :(得分:0)
也许此正则表达式将为您工作:
^([3-9]|[1-9][0-9])(\.[0-9]+)?$|^100(\.0+)?$
测试:
$ cat numeric.txt
0.0
3
3.0
3.00
3.001
2.99
99.99
99.999
100
100.0
100.00
100.01
100.99
$ egrep '^([3-9]|[1-9][0-9])(\.[0-9]+)?$|^100(\.0+)?$' numeric.txt
3
3.0
3.00
3.001
99.99
99.999
100
100.0
100.00