【问题标题】:Regular expression for range 0-200.0000 (including 0 and 200)范围 0-200.0000 的正则表达式(包括 0 和 200)
【发布时间】:2019-02-07 13:20:47
【问题描述】:

我正在尝试编写接受0200.0000 之间数字的正则表达式。

我现在设法写了这个:

^([0-9]|[1-8][0-9]|9[0-9]|1[0-9]{2}|200){1}(\.[0-9]{1,4})?$

但问题是我的表达式接受像200.0001 和更大的数字。

如果之前的数字是200,知道如何设置小数点后的数字限制吗?谢谢

【问题讨论】:

  • 这是由于[0-9]{1,4}。使用0{1,4}。如果要匹配200 之前小数部分中的任何数字,则需要为200 和前面的选项设置两个不同的可选组。
  • ^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$ (demo)。
  • 很高兴它对你有用。如果我的回答对您有帮助(请参阅How to upvote on Stack Overflow?),也请考虑投票,因为您在达到 15 个代表点后有权获得投票特权。请注意,您可以对所有有用的答案进行投票。

标签: regex max decimal


【解决方案1】:

问题在于(\.[0-9]{1,4})? 匹配可选的点序列和0111111 之后的一到四个任意 数字还有 200200 之前的数字需要使用(\.[0-9]{1,4})?200 之前的数字需要使用(\.0{1,4})?

^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$

this demo

我建议使用非捕获组而不是捕获组(即将(...) 转换为(?:...)),因为您以后不会使用这些部分。

我看到你的模式自动是generated online,所以我决定把它“缩小”一点。

模式详情

  • ^ - 字符串开头
  • (?: - 匹配两个备选方案的非捕获组的开始:
    • (?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?:
      • (?:[1-9]?[0-9]|1[0-9]{2}) - 从19 的可选数字,然后是任意一位数字,或1 后跟任意两位数字
      • (?:\.[0-9]{1,4})? - 一个可选的点序列,后跟一个到四个 any 数字
    • | - 或
    • 200(?:\.0{1,4})? - 200 后跟 1 或 0 次 . 后跟 1 到 4 个零
    • )$ - 组和字符串结束。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多