【问题标题】:Validate decimal greater than 1 with regex使用正则表达式验证大于 1 的小数
【发布时间】:2021-03-10 17:09:26
【问题描述】:

我想验证一个包含三个可选整数和小数点后四个强制数字的数字是否大于 1。例如:

0.0000     [No]
0.9999     [No]
1.0000     [No]
1.0009     [Yes]
01.0000    [No]
01.0009    [Yes]
001.0000   [No]
011.0000   [Yes]
222.0000   [Yes]
000.9999   [No]

我已经创建了这个正则表达式:

  (?!^1*$)(?!^1*\.0*$)^(?:[1-9]|\d\d\d)(?:\.\d{4,4})$

但它并不适用于所有情况

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用此正则表达式来允许 . 之前最多 3 位数字和 . 之后最多 4 位数字来匹配大于 1 的值:

    ^(?!0*1\.0+$)(?=0*[1-9])\d{1,3}\.\d{4}$
    

    RegEx Demo

    正则表达式详细信息:

    • ^:开始
    • (?!0*1\.0+$):肯定的先行条件断言我们没有可选零的情况,后跟1.0000
    • (?=0*[1-9]):肯定的前瞻条件断言我们至少有一个非零数字提前
    • \d{1,3}:匹配 1 到 3 位数字
    • \.:匹配一个.
    • \d{4}:匹配4位数字
    • $:结束

    【讨论】:

      【解决方案2】:

      如果支持,您可以使用否定前瞻来排除一些可能的匹配项:

      ^(?!0*1\.0+$|\d{4}\.)0*[1-9]\d*\.\d{4}$
      

      模式匹配

      • ^ 字符串开始
      • (?! 负前瞻,不直接向右
        • 0*1\.0+$ 匹配可选零、一个点和 1 个或多个零
        • |
        • \d{4}\. 匹配 4 个数字和一个点
      • ) 关闭前瞻
      • 0*[1-9]\d* 匹配可选零、数字 1-9 和可选数字
      • \.\d{4} 匹配一个 .和 4 位数字
      • $字符串结束

      Regex demo

      【讨论】:

        【解决方案3】:

        看起来你可以使用:

        ^(?!0*\.|0*1\.0*$)\d{1,3}\.\d{4}$
        

        demo

        • ^ - 开始字符串锚点。
        • (?! - 打开负前瞻:
          • 0*\. - 防止 0+ 前导零到文字点;
          • | - 或者:
          • 0*1\.0*$ - 防止 0+ 前导零到 1,后跟文字点和尾随零,直到字符串结束。
          • ) - 关闭负前瞻。
        • \d{1,3}\.\d{4} - 1-3 个前导数字、一个文字点和 4 个尾随数字。
        • $ - 结束字符串锚。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-28
          • 2016-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多