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

  • 本文关键字:数字 之间 许数字 一个 正则表达式 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。

有什么办法,我可以达到预期的结果吗?

与最后一个100交替使用时,对.d?[1-9]使用负前瞻,以确保小数位数(如果有的话(只有0。

由于组末尾的+,您的第一个模式也可以匹配可选小数(如333和101010(之前的多个重复数字,因此如果您只想在3和100之间匹配,最好删除+

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

https://regex101.com/r/tJd3LQ/1

要允许前导零,请在^:之后添加0*

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

你可以试试这个伴侣

^(?: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之间的任何数字

建议

始终使用非捕获组,以防您在正则表达式中的其他位置没有再次使用该组。

^([3-9]|[1-9][0-9]|100)+(.d{1,2})?$的问题在于,它在第一个区块(负责允许整数的区块(中也允许100。

在您的情况下,您需要使用类似的东西:^100.00$|([3-9]|[1-9][0-9])+(.d{1,2})?$(此处的示例(。

此表达式将尝试将100.00作为一个整体进行匹配(这是您的上界,或者是3.0099.99之间的任何数字。

也许这个正则表达式适用于您:

^([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

最新更新