0

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

4

4 回答 4

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.

在这里查看它的实际应用。

但你可能最好这样做getFloatValue(str)<24999999.99

于 2013-11-08T23:34:53.567 回答
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}- 捕获小数
于 2013-11-08T19:47:12.673 回答
0

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

^[0-2]?[0-4]?\d?\d?\d?\d?\d?\d(?:\.\d{1,2})?$
于 2013-11-08T20:19:15.783 回答
0

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

但是,如果您必须有正则表达式,请尝试以下操作

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

正则表达式101演示

于 2013-11-08T20:26:21.430 回答