正则表达式范围在 0 到 100 之间,包括两位小数

Posted

技术标签:

【中文标题】正则表达式范围在 0 到 100 之间,包括两位小数【英文标题】:Regex range between 0 and 100 including two decimal 【发布时间】:2016-09-21 19:44:49 【问题描述】:

我正在尝试找出执行以下操作的正则表达式。以下两个条件都必须为真: 1) 介于 0 和 100(含)之间 2) 只能包含一位或两位小数,但不是必须的。

它不应该允许 100.01 或 100.1 100 是最大值,或者 100.0 或 100.00

我试过^(100(?:\.00)?|0(?:\.\d\d)?|\d?\d(?:\.\d\d)?)$ 这对我有帮助 this question 但这不接受99.0(一位小数)。 我可能已经很接近了。

【问题讨论】:

【参考方案1】:

您只需将第二个十进制数字设为可选:

^(?:100(?:\.00?)?|\d?\d(?:\.\d\d?)?)$
              ^                 ^

请参阅updated regex demo。 0(?:\.\d\d)? 替代品被 \d?\d(?:\.\d\d)? 覆盖(根据 Sebastian's comment),因此可以被删除。

? 量词匹配它量化的子模式的一次或零次出现。

模式详情

^ - 字符串开头 (?: - 交替组的开始: 100(?:\.00?)? - 100100.0100.00.00 是可选的,最后一个 0 也是可选的) \d?\d(?:\.\d\d?)? - 一个可选数字,后跟一个必填数字,后跟一个点、一个数字和 一个可选数字的可选序列。 ) - 交替组结束 $ - 字符串结束。

BONUS:如果数字可以有 either .(点)或 ,(逗号)作为小数分隔符,您可以替换 all 正则表达式中的\. 模式与[.,]

^(?:100(?:[.,]00?)?|\d?\d(?:[.,]\d\d?)?)$

【讨论】:

0(?:\.\d\d?)? 已被\d?\d(?:\.\d\d?)? 覆盖 - 那为什么不删除它呢? @SebastianProske:我只关注重点——将小数点后第二位设为可选。是的,没错,它被覆盖了。

以上是关于正则表达式范围在 0 到 100 之间,包括两位小数的主要内容,如果未能解决你的问题,请参考以下文章

正数范围 18-65 的正则表达式是啥?它必须只接受两位数

用于验证 int 范围字符串的正则表达式

正则表达式

捕获从“ NE”开始的正则表达式,后跟61到71之间的任何一位或两位数字

如何用正则表达式限制只输入整数(包括负整数和0)

99 到 9999999 之间的数字正则表达式