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

小数点以下 2 桁が固定されていると仮定すると、これを次のように一致させることができます。

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

ここで^と 末尾$は完全な文字列に一致しますが、それらを省略することもできます (問題は、誰かが 10 進数を 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

小数点以下 2 桁のみを考慮します。また、負の数はありません。

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