正则表达式检查最大数字和精度

时间:2014-05-29 19:07:03

标签: regex

我需要创建一个正则表达式,允许负数为1到24位数(如果是整数)或数字为1到24减去十进制数字(最多12位小数)。

有效数字的示例:

123456789012345678901234
123456789012.345678901234
-123456789012345678901234
-123456789012.345678901234

无效数字的示例:

1.12345678901234567890

我该怎么做?

3 个答案:

答案 0 :(得分:3)

以下是:

^-?(?=(\d\.?){1,24}$)\d+(\.\d{1,12})?$

Regular expression visualization

<强> Demo

答案 1 :(得分:0)

这适用于您的示例:

^-?\d{2,12}\.?\d{1,12}$

答案 2 :(得分:0)

Demo

^-?(?:\d{0,24}|(?!.{26,})\d*\.\d{0,12})$

<强>解释

^             (?# assert start of string)
-?            (?# match optional -)
(?:           (?# start non-capturing group)
  \d{0,24}    (?# match up-to-24 digits)
 |            (?# OR)
  (?!.{26,})  (?# negative lookahead assertion to prevent 26+ characters)
  \d*         (?# match 0+ digits)
  \.          (?# match . literally)
  \d{0,12}    (?# match 0-12 digits)
)             (?# end non-capturing group)
$             (?# assert end of string)

我认为其他人并不是(?!.{26,})断言。这用于替换小数。如果我们想将小数限制为12,并将整个数字位数限制为24 ..那么我们就不能在字符串中包含超过25个字符。