0

% または数値を割引値として使用する「動的な」割引マスクを作成することはできますか? これを行う簡単な方法は何ですか?有効な入力のサンプル: -25% または 0.25 または -5$ 0 ではなく、ドットの後の 2 桁

4

2 に答える 2

0

私があなたの質問を正しく理解しているなら、あなたはこのようなものが欲しいです:

@"^[+-]?(?:\d*\.)?\d+[%$]?$"

これは、の例に部分的に基づいています-5$。ただし、通常はが$前面に表示されるため、次のようなものが必要になります。

@"^(?:\$(?!.*%))?[+-]?(?:\d*\.)?\d+%?$"

これにより、、、、またはが許可さ$-5.0010ます+20%が、ブロックされ$5%ます。

編集:

カンマを許可するというOlivierのアイデアで実行する:

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

理解しやすくするために拡張されました:

@"^               #Require matching from the beginning of the line
(\$(?!.*%))?      #Optionally allow a $ here, but only if there's no % later on.
[+-]?             #Optionally allow + or - at the beginning
(
  \d{1,3}         #Covers the first three numerals
  ((,\d{3})*|\d*) #Allow numbers in 1,234,567 format, or simply a long string of numerals with no commas
)?                #Allow for a decimal with no leading digits    
(\.\d+)?          #Optionally allow a period, but only with numerals behind it
\b                #Word break (a sneaky way to require at least one numeral before this position, thus preventing an empty string)
%?                #Optionally allow %
$"                #End of line
于 2012-06-02T16:10:40.530 に答える
0

試す

@"(\+|-)?(\d+(\.\d*)?|\.\d+)%?"

それは見つけるでしょう:

123.23
12.4%
.34
.34%
45。
45.%
8
7%
34
34%
+ 2.55%
-1.75%

アップデート

そして..。

@"(\+|-)?(\d+(,\d{3})*(?!\d)(\.\d*)?|\.\d+)%?"

...数千のセパレータを含めることもできます。


2番目の正規表現は、猫がキーボードを横切って歩いたように見えることを告白する必要があります。ここで説明

(\+|-)?オプション?で、プラス記号またはマイナス記号。

\d+(,\d{3})*(?!\d)(\.\d*)?1つ以上の数字\d+の後に数千の区切り文字と3桁を加えたもので、4桁を順番に使用できないようにするために数字を続けないでください。オプションで、小数点と任意の数字を続けて(,\d{3})*ください。(?!\d)(\.\d*)?

|\.\d+または、小数点の後に少なくとも1桁の数字が続きます。

%?最後に、オプションのパーセント記号。

于 2012-06-02T15:44:09.603 に答える