正则表达式范围在 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?)?
- 100
、100.0
或 100.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 之间,包括两位小数的主要内容,如果未能解决你的问题,请参考以下文章