8

次の数値と一致する場合に数値を検証する、C# に適した正規表現は何ですか?

 $1,000,000.150
 $10000000.199
 $10000 
 1,000,000.150
 100000.123
 10000

または負の等価物?

4

8 に答える 8

14

csmba の正規表現を少し変更するだけで使用できます。

^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$
于 2009-03-06T06:42:21.877 に答える
5

私はssgが正しいと思います。特に、ソフトウェアが非米国中心のデータ入力を処理する必要がある場合は、正規表現をあまり適切に使用することはできません。

たとえば、通貨記号がユーロ、日本円、英ポンドの場合、他に何十種類もの通貨記号がありますか?

数値の書式設定規則はどうですか?

米国では入力します1,000,000.00が、フランスでは1.000.000,00. 他の国では、数字グループ間のスペースを許可しています...

カルチャを考慮せずにストレートな正規表現を使用すると、ソフトウェアが非米国中心のコンテキストで使用されることがないことを 100% 確信しない限り、正常に検証されることはありません。

于 2009-03-06T06:49:24.870 に答える
3
^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{2})?)$
于 2009-03-06T06:37:03.823 に答える
2

I think I've found a problem with ssg's solution (or perhaps an MS bug!).

Running this:

float.TryParse("0,2",NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out num)

Returns true. Surely "0,2" isn't a valid currency value?

于 2012-06-18T07:14:39.477 に答える
1

フロートには注意してください。最終的には、0.00999999 で表される 0.01 などのケースにヒットします。文字列または整数を使用することをお勧めします。

于 2009-03-06T19:19:48.530 に答える
0

この正規表現を米国通貨に使用します\$(\ d)* \d一致$300、$12900非一致$12900.00

于 2009-04-24T14:09:38.133 に答える
0

これを試してみてください。小数点を 1 つだけ使用できるように微調整が必​​要になる場合がありますが、テスト ケースには一致します。これが役立つことを願っています。

[$\d,.]+
于 2009-03-06T06:37:10.267 に答える