Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-验证最多为5000个数字,小数点后1位的数字_Regex - Fatal编程技术网

Regex 正则表达式-验证最多为5000个数字,小数点后1位的数字

Regex 正则表达式-验证最多为5000个数字,小数点后1位的数字,regex,Regex,我正在尝试创建正则表达式,它可以使用范围为b/w0-5000的数字,最多可以使用一个小数位 i.e. 5000 , 4999.9 , 25.0 , 2500.9 我尝试过使用正则表达式,但不知道需要在哪里添加小数点 ^0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9]|5000)$ 小数部分可以定义为(?:[.][0-9])?子模式,该子模式匹配一个或零个文本点序列[.],后跟一个数字([0-9]+)。但是,您需要对正则表达式重新分组:5000必

我正在尝试创建
正则表达式
,它可以使用范围为b/w
0-5000
的数字,最多可以使用
一个小数位

i.e. 5000 , 4999.9 , 25.0 , 2500.9
我尝试过使用正则表达式,但不知道需要在哪里添加小数点

^0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9]|5000)$

小数部分可以定义为
(?:[.][0-9])?
子模式,该子模式匹配一个或零个文本点序列
[.]
,后跟一个数字(
[0-9]+
)。但是,您需要对正则表达式重新分组:
5000
必须是一个单独的替代项,因为它只能有
.0
小数部分:

^(?:0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9])(?:[.][0-9])?|5000(?:[.]0)?)$
  ^^                                                ^^^^^^^^^^^^^^     ^^^^^^^^^

细分:

  • ^
    -字符串的开头
  • (?:0*(?:[0-9]|[1-9][0-9][0-9]?;[1-4][0-9][0-9][0-9])(?:[.][0-9])?
    -
    0
    4999
    数字,带或不带前导
    0
    符号,后跟一位或零位
    +任何数字(一次出现)
  • |
    -或
  • 5000(?:[.]0)?
    -
    5000
    可选后跟一个或零序
    .0
  • $
    -字符串结尾

    • 我能想到的最好的办法是:

      /^(5000(\.0)?|([0-4]?\d?\d?\d)(\.\d)?)$/
      
      它基本上将5000视为一个单独的案例,而对于所有其他案例,它更为通用,在有4位数字的情况下,将最高有效位限制为4位。
      小数点(+一位数)是可选的

      编辑: 更彻底的模式分解:

    • |
      的左侧是5000的特例。它只是一个数字5000,后面有一个可选的小数点和一个零
    • |
      的右侧:
      A.0-4之间的可选数字
      B后跟另外两个可选数字
      C后跟一个必填数字
      D后跟一个可选的小数点和一个位数

    • 您可以测试它是否合适。

      所以,
      5000.2
      是不允许的,对吗?
      5000.000
      ?不允许5000.2不允许5000.000,因为它有3位小数。5000.0很好。啊,我明白了,我现在调整了答案。嗯,我想现在,它是正确的。我现在将添加描述。我不确定您是否希望在
      5000
      之前允许可选的前导零。如果你这样做了,你需要。注意,另一个答案可能更适合使用。我只是保留了原始样式,以帮助理解向现有正则表达式添加任何内容的技术。我知道我不必继续回答:),但请提供模式解释。您的回答也是正确的,我将保留此内容以供将来参考。谢谢你的解释,干得好!这就是回答regex相关问题的方法:始终添加详细描述。在这里,每一分钟的符号都可能使整个代码崩溃,因此必须解释正则表达式模式+1.