私はこれに問題があります。0 から 24999999.99 までの任意の数値のみを許可したいと思います。私は正規表現が初めてで、これに苦労しています。
質問する
113 次
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 に答える