正则表达式限制输入大于24999999.99的数字

时间:2013-11-08 19:40:08

标签: regex expression

我遇到了麻烦。我想只允许0到24999999.99之间的任何数字。我是正则表达式的新手,我对此有困难。

4 个答案:

答案 0 :(得分:2)

^0*(\d{0,7}(\.\d+)?|1\d{7}(\.\d+)?|2[0-4]\d{6}(\.(9([0-8]\d*)?|990*|[0-8]\d*))?)$

通过教程,我会为你解决这个问题:

^        Match the beginning of the string
0*       Any number of leading Zeros, including none
(
  \d{0,7}  Zero to seven digits.
  (\.\d+)? An optional decimal followed by one or more digits
  |        OR
  1\d{7}   A one followed by exactly seven digits
  (\.\d+)? The decimal expression again
  |        OR
  2[0-4]   A two, followed by 0, 1, 2, 3, or 4
  \d{6}    ... followed by six digits (exactly)
  (
    \.(      A decimal point, with...
      9        A nine
      (
        [0-8]\d* Any digit except nine, followed by any number of digits
      )?       optionally
      |        OR
      990*     Two nines, followed by any number of zeros
      |        OR
      [0-8]\d* Any number except 9, followed by any number of digits
    )
  )?       This whole decimal expression has been optional
)
$      End of String.

在行动here中查看。

但你最好不要做getFloatValue(str)<24999999.99

答案 1 :(得分:0)

假设两位小数是固定的,您可以将其与:

匹配
^(?:(?:\d{1,7})|(?:[0-1]\d{1,7})|(?:2[0-4]\d{1,6}))(?:\.\d{2}){0,1}$

这里^和尾随$使它匹配一个完整的字符串,但你可以将它们排除(问题是如果有人只输入1个小数,它将匹配而不包含小数)。 \d是数字字符,我使用{m,n}来说明最小和最大重复次数。 (?: )将小数点和小数与?:组合在一起,使其成为非捕获组,因为您不需要捕获这些值。

小组细分:

  • (?:(?:\d{1,7}) - 捕获低于10000000.00的值
  • (?:[0-1]\d{1,7}) - 捕获低于20000000.00的值(感谢@jkshah发现错误时发现错误)
  • (?:2[0-4]\d{1,6}) - 捕获高于20000000.00的值并检查前导24
  • (?:\.\d{2}){0,1} - 捕获小数

答案 2 :(得分:0)

只考虑两个小数点。此外,没有负数。

^[0-2]?[0-4]?\d?\d?\d?\d?\d?\d(?:\.\d{1,2})?$

答案 3 :(得分:0)

正如评论中所提到的,通过数学比较可以更好地处理这个问题。

但如果你必须有正则表达式,那么试试

^(?:[0-1]?[0-9]|2[0-4])?[0-9]{0,6}(?:\.[0-9]+)?$

regex101 demo

相关问题