预定小数

时间:2018-05-12 18:31:02

标签: regex

我正在尝试构建一个表达式来检查小数,如下所示:

valid number with 6 digits and/or precision of 1-4 digits 
---------
656545
452568.1
574896.001
698547.2558

Not valid numbers:
---------
65456.23 - less than 6 main digits
6542166 - more than 6
652541.23165 - more than 4 digits of precision

到目前为止,我已经做到了这一点:

\b\d{6}\.?\d{0,4}? 

但它也匹配超过6位数和/或超过4位精度的数字。 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

resources.add(swaggerResource("login-service", "/api/login/the-login/api-docs", "2.0"));

这里的问题是小数点是可选的。这允许匹配一个10位数字(前六位数,然后是0到4位)......之后可能更多,因为\b\d{6}\.?\d{0,4}? 之后没有锚定。

相反:

\d{0,4}?

这样,如果数字中有小数,则小数点不是可选的。最后的\b\d{6}(\.\d{1,4})?(?!\.)\b (负前瞻模式)确保数字后面没有点。

如果数字本身出现在某一行上(或单独出现在字符串或记录中,或者您拥有的任何内容):

(?!\.)

答案 1 :(得分:1)

如果我认为我理解你,从数字视角,就像这样:

无垫:(?<![\d.])[1-9]\d{5}(?:\.\d{0,3}[1-9])?(?![\d.])

演示:https://regex101.com/r/68gLUF/1

零填充:(?<![\d.])0*[1-9]\d{5}(?:\.\d{0,3}[1-9]0*)?(?![\d.])

可读版本:

 (?<! [\d.] )         # Digit boundary
 [1-9] \d{5}          # Required, Valid 6 digit whole number 100,000 - 999,999
 (?:                  # Optional, Valid decimal fraction .0001 - .9999
      \.
      \d{0,3} 
      [1-9] 
 )?
 (?! [\d.] )          # Digit boundary