0

タイトルが示すように、入力文字列を検証して、それが 1 から 30 までの小数点以下 2 桁までの数値であることを確認できる正規表現が必要です。

例えば、

4 is fine
10.25 is fine
15.3 is fine
29.99 is fine
30 is fine
30.01 is not fine

編集:使用しているシステムの制限により、正規表現でなければなりません。いくつかのことを試しましたが、

どこまでも行ける

^\d{1,2}(\.\d{1,2})?$ 

これにより、小数点以下 2 桁までの 2 桁の数値が許可されます。

4

3 に答える 3

4

編集:正規表現が必要な特定の状況では、これを試してください:

^(?!0)(30(\.0{1,2})?|[12]?\d(\.\d{1,2})?)$

壊す:

^ ... $- 正規表現が文字列の最初と最後で開始および終了することを確認します。

(?!0)- 0 から始まらないようにするための否定先読み

(30(\.0{1,2})?- オプションで 30 に続いて .0 または .00

|または...

[12]?1または2の十の位のみ

\dオプションではない単位の 1 桁

(\.\d{1,2})?オプションの .digit または .digitdigit

残念ながら、この正規表現は、任意の範囲の数値に適合するように簡単に調整することはできません。(このような正規表現を自動的に吐き出すプログラムを作成するのは興味深いプロジェクトです。)


それ以外の場合は、次のように言います。車輪を再発明しないでください。

double result;
if (double.TryParse(inputstring, out result))
{
    if (result >= 1.0 & result <= 30.0)
    {
        return true;
    }
}
return false;

小数点以下 2 桁ではなく、それが必要な場合は、Round(result, 2)そのように計算できます。

于 2013-05-03T05:03:34.500 に答える
0

上記のすべての条件をテストする単一の正規表現を作成することは可能ですが、私はそうしません。

最初に小数点以下の桁数を正規表現でチェックし、文字列の解析後に範囲テストをそのままにします。

以下のこの正規表現では、小数点以下 0 ~ 2 桁を使用できます (例: 1.201.、)。ケースに注意してください-このケースが必要ない場合は、に変更してください1.121.{0,2}{1,2}

^\d+(\.\d{0,2})?$

.2上記の正規表現では無効と見なされることに注意してください.

文字列を検証したら、パタシュの回答のように、数値を解析してその範囲を確認できます。

于 2013-05-03T05:13:32.600 に答える
0

それはそれを行う必要があります:

^([12]?\d(\.\d{2})?|30(\.\d{2})?)$

[12]?\d(.\d{2})? - 1 から 29.99 または 30.00 または 30 までの数値

于 2013-05-03T05:15:06.263 に答える