通貨、浮動小数点、または整数を検証する C# 正規表現とは何ですか?

StackOverflow https://stackoverflow.com/questions/617826

  •  03-07-2019
  •  | 
  •  

質問

以下に一致する場合に数値を検証する、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 になります。その他の国では、数字のグループ化の間隔を許可しています...

Cultureを考慮せずに正規表現を使用する場合、ソフトウェアが米国以外の中心的なコンテキストで使用されることは決してないと100%確信しない限り、正常に検証されることはありません。

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

ssgのソリューションに問題(またはMSのバグ!)が見つかったと思います。

これを実行:

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

trueを返します。確かに「0,2」;有効な通貨値ではありませんか?

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

これを試してみてください。小数点を 1 つだけ許可するには微調整が必​​要になる場合がありますが、テスト ケースには一致します。これがお役に立てば幸いです。

[$\d,.]+

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top