【问题标题】:Regex range between 0 and 100 including two decimal正则表达式范围在 0 到 100 之间,包括两位小数
【发布时间】: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(一位小数)。 我可能已经很接近了。

【问题讨论】:

    标签: regex


    【解决方案1】:

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

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

    请参阅updated regex demo0(?:\.\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:我只关注重点——将小数点后第二位设为可选。是的,没错,它被覆盖了。
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2011-11-26
    • 2013-07-30
    • 2020-02-25
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多