我使用正则表达式将数字限制在3.00到100.00之间,但允许数字在100.01到100.99之间

时间:2018-12-04 06:27:31

标签: regex

我要求将数字限制为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。

有什么办法可以达到预期的效果吗?

4 个答案:

答案 0 :(得分:4)

您可以尝试与此伴侣

^(?:100(?:\.0+)?|(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?)$

Demo

  

说明

  • ^-锚点代表字符串的开头。
  • (?: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.0099.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