次の数値と一致する場合に数値を検証する、C# に適した正規表現は何ですか?
$1,000,000.150 $10000000.199 $10000 1,000,000.150 100000.123 10000
または負の等価物?
csmba の正規表現を少し変更するだけで使用できます。
^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$
私はssgが正しいと思います。特に、ソフトウェアが非米国中心のデータ入力を処理する必要がある場合は、正規表現をあまり適切に使用することはできません。
たとえば、通貨記号がユーロ、日本円、英ポンドの場合、他に何十種類もの通貨記号がありますか?
数値の書式設定規則はどうですか?
米国では入力します1,000,000.00
が、フランスでは1.000.000,00
. 他の国では、数字グループ間のスペースを許可しています...
カルチャを考慮せずにストレートな正規表現を使用すると、ソフトウェアが非米国中心のコンテキストで使用されることがないことを 100% 確信しない限り、正常に検証されることはありません。
^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{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?
フロートには注意してください。最終的には、0.00999999 で表される 0.01 などのケースにヒットします。文字列または整数を使用することをお勧めします。
この正規表現を米国通貨に使用します\$(\ d)* \d一致$300、$12900非一致$12900.00
これを試してみてください。小数点を 1 つだけ使用できるように微調整が必要になる場合がありますが、テスト ケースには一致します。これが役立つことを願っています。
[$\d,.]+