【问题标题】:Regular expression Range with decimal 0.1 - 7.0正则表达式范围小数 0.1 - 7.0
【发布时间】:2012-03-21 07:16:16
【问题描述】:

我需要一个正则表达式来验证小数点和范围。应包含 3 个数字,包括点,并且值必须大于 0.0。这意味着有效范围是从 0.1 到 7.0。

我使用了以下正则表达式:^\\d{1,1}(\\.\\d{1,2})?$

除了范围验证外,它工作正常。我需要改变什么?

【问题讨论】:

  • 如果可能的话,我建议不要对这个任务使用正则表达式。 (例如,如果有的话,仅将其用作第一阶段。)
  • 您当前的正则表达式还允许整数 (5) 和精度更高的小数 (0.11),根据您的问题文本,这不应该被允许。你真正想要什么?
  • if(s.matches("^\\d{1,1}(\\.\\d{1,2})?$") && Double.valueOf(s) >= 0.1 && Double.valueOf(s) <= 7.0) { ... }

标签: regex range


【解决方案1】:

正则表达式在验证数字范围方面是出了名的糟糕。但这是可能的。您必须将数字范围分解为这些数字的预期文本表示:

^                  # Start of string
(?:                # Either match...
 7(?:\.0)?         # 7.0 (or 7)
|                  # or
 [1-6](?:\.[0-9])? # 1.0-6.9 (or 1-6)
|                  # or
 0?\.[1-9]         # 0.1-0.9 (or .1-.9)
)                  # End of alternation
$                  # End of string

作为单行:

^(?:7(?:\.0)?|[1-6](?:\.[0-9])?|0?\.[1-9])$

在 Java 中:

Pattern regex = Pattern.compile("^(?:7(?:\\.0)?|[1-6](?:\\.[0-9])?|0?\\.[1-9])$");

【讨论】:

  • 在您的一个班轮中,第二个和第三个替代方案之间缺少|
  • @stema:哎呀,我想我在从详细版本中删除换行符时经常按一次Del :)。感谢您的关注。
  • @TimPietzcker 效果不佳。我在我的 java 程序中使用这个正则表达式。它给出错误“java.lang.Error:未解决的编译问题:无效的转义序列(有效的是 \b \t \n \f \r \" \' \\)”
  • @siva:在 Java 字符串中,您需要将反斜杠加倍。在询问正则表达式问题时,请始终包含您正在使用的语言,因为这些细微的警告。请参阅regex tag info
  • @TimPietzcker 是的,我是正则表达式的新手。当然我会通过正则表达式教程。谢谢
【解决方案2】:

要完成出色的@TimPietzcker 答案,

这个正则表达式...

^(?:7(?:\.0)?|[1-6](?:\.(?:[0-9])?)?|0?(?:\.(?:[1-9])?)?)$

也匹配:

0
0.
2. 
.2

给需要的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多