首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我使用正则表达式将数字限制在3.00到100.0之间,但它允许100.01到100.99之间的数字。

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

Stack Overflow用户
提问于 2018-12-04 06:27:31
回答 4查看 280关注 0票数 3

我有一个要求将数字限制在3.00到100.00之间,我在下面的表达式中使用

代码语言:javascript
复制
^([3-9]|[1-9][0-9]|100)+(\.\d{1,2})?$

上面的表达式的问题是,它允许100.01到100.99,这应该是restricted.It,也允许310-399,这需要限制。

我用了另一种同样的表达方式

代码语言:javascript
复制
^([3-9]|[1-9][0-9]|100.00)+(\.\d{1,2})?$

但我们需要输入100.00才能传递正则表达式,而不是100。

有没有办法,我可以达到预期的结果?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-04 06:34:30

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

由于组尾的+,您的第一个模式还可以匹配可选小数点之前的许多重复数字(比如333和101010),所以如果只想匹配3到100,最好删除+

代码语言:javascript
复制
^(?:[3-9]|[1-9][0-9]|100(?!\.\d?[1-9]))(?:\.\d{1,2})?$
                        ^^^^^^^^^^^^^^

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

若要允许前导零,请在0*后面添加^

代码语言:javascript
复制
^0*(?:[3-9]|[1-9][0-9]|100(?!\.\d?[1-9]))(?:\.\d{1,2})?$
 ^^
票数 4
EN

Stack Overflow用户

发布于 2018-12-04 06:33:06

你可以试试这个伙伴

代码语言:javascript
复制
^(?:100(?:\.0+)?|(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?)$

演示

解释

  • ^ - Anchor表示字符串的开始。
  • (?:100(?:\.0+)?) --这将匹配100,100.0,100.00(任何十进制数的零)。
  • | -这与逻辑OR的工作原理相同.
  • (?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?) -这将匹配从3.00到99.99之间的任何数字

建议

始终使用非捕获组,以防您在regex中再次使用该组。

票数 4
EN

Stack Overflow用户

发布于 2018-12-04 06:32:12

问题是:^([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之间的任意数字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53606890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档