使用正则表达式小于91的十进制和整数



我有这个正则表达式/^(0|[1-9]d*)(.d+)?$/

它允许所有的十进制和整数。

我需要它来加上所有小于91的数字。

我该如何实现?

请帮助

小于91的整数或小数可以这样实现:

^(?:0|[1-8]d?|90?)(?:.d+)?$

查看在线演示。

  • ^-起始线锚
  • (?:-打开第一个非捕获组:
    • 0|[1-8]d?|90?-匹配零1-8和可选数字,或九与可选零
    • )-关闭第一个非捕获组
  • (?:-打开第二个非捕获组:
    • .d+-文字点和1个以上数字
    • )?-关闭第二个非捕获组并使其成为可选组
  • $——终点线锚

编辑:如果您不介意根据";00";或";00.0000";你可以使用:

^(?:d0?|[1-8]d?)(?:.d+)?$

或者,更不冗长的是,使用负面前瞻:

^(?!9[1-9])dd?(?:.d+)?$

使用您显示的示例,请尝试以下操作。

^(?:[0-9]|[0-8][0-9]|90)(?:.d+)?$

以上regex 的在线演示

OR也可以缩短如下:

^(?:[0-8]?[0-9]|90)(?:.d+)?$

解释:添加以上详细解释。

^(?:                   ##Matching from starting of value and starting a non-capturing group here.
[0-9]|[0-8][0-9]|90   ##Matching either 0 to 9 OR till 89 OR 9 here.
)                      ##Closing non-capturing group here.
(?:.d+)?$            ##In a non-capturing group matching dot followed by 1 or more digits keep it optional at the last of value.


奖金解决方案:仅根据我的假设,如果您想匹配额外的零,但仍小于91,请尝试以下操作。

^(?:0+)?(?:[0-9]|[0-8][0-9]|90)(?:.d+)?$

这个怎么样?

^(90|[0-8][0-9])$

只需将9000匹配到89即可。

最新更新