使用正则表达式验证大于1的十进制数

3

我想验证一个数字是否大于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})$

但它并不适用于所有情况。

3个回答

6
您可以使用这个正则表达式,允许在小数点之前最多有3位数字,在小数点之后最多有4位数字,以匹配大于1的值:
^(?!0*1\.0+$)(?=0*[1-9])\d{1,3}\.\d{4}$

正则表达式演示

正则表达式细节:

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

4
如果支持,您可以使用负向前瞻来排除某些可能的匹配项:
^(?!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 个数字
  • $ 字符串的结尾

正则表达式演示


2

看起来你可以使用:

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

查看演示

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接