0

小数点とコンマを含む数値を許可するテキストボックスに金額を入力する必要があります。これの正規表現は何ですか?

以下を使用しました

txtInitialAmountGuarDetails.ValidationSettings.RegularExpression.ValidationExpression = @"^[-+]?\d*[0-9](|.\d*[0-9])(|,\d*[0-9])?$";

しかし、300,000,000,000,000 のような大きな数では機能しません。

4

5 に答える 5

7

それを少しずつ構築します。米国のロケールを考えると、これらのルールを持つ番号は次のようになります。

  • 文字列の始まり:^
  • オプションの記号:[+-]?
  • 3 桁まで:\d{1,3}
  • コンマの後に 3 桁の数字が続き、何度でも繰り返されます。(?:,\d{3})*
  • オプションの小数点と小数部:(?:[.]\d+)?
  • 文字列の終わり:$

小数点以下の桁数に制限はありますか? 次に、最後のプラス記号を2}2 桁の { に変更します。

したがって、正規表現は次のとおりです。

@"^[+-]?\d{1,3}(?:,\d{3})*(?:[.]\d+)?$"

または、自分の作業を説明したい場合は、xオプションと次を使用します。

@"(?x)            # Extended format.
  ^[+-]?          # Optional sign.
  \d{1,3}         # Initial 1-3 digits.
  (?:,\d{3})*     # Any number of commas followed by 3 digits.
  (?:[.]\d+)?$"   # An optional decimal point followed by any number of digits.

しかし、C# には既にロケール依存のバリデーターがありますか?

于 2013-06-13T05:01:46.157 に答える
1

この正規表現も試すことができます:

^([+-]?\d{1,3}(?:,\d{1,3})*(?:\.\d+)*)$

.正規表現エンジンでは特定の意味があるため、エスケープする必要があることに注意してください。

また、このタスクには正規表現を使用せず、代わりにmasked textboxを確認することをお勧めします。

于 2013-06-13T06:38:40.167 に答える
1

私はそれを実行していませんが、試してみることができます。

var regexp =/^\s*?([\d\,]+(\.\d{1,2})?|\.\d{1,2})\s*$/;
于 2013-06-13T04:53:47.103 に答える
1

これは機能します:\d{1,3}(,\d{3})*\.{0,1}(\d{3},)*\d{0,3}

カンマ以降の問題に関しては、どの選択でも問題ありません。コンマを使用すると、私の正規表現が機能します。5桁の場合、スペースは末尾を(\d{5}\s{1})*\d{0,5}. もちろん、小数点の後に区切り記号を使用しない場合は、\d*

于 2013-06-13T04:58:10.660 に答える
-1

これを試してください:

^([0-9]{3}[,.]|)+[0-9]{0,3}$

機能強化が必要かどうか教えてください...

于 2013-06-13T05:01:39.540 に答える