0

是否可以创建一个将 % 或数字作为折扣值的“动态”折扣掩码?这样做的简单方法是什么?验证输入的样本:-25% 或 0.25 或 -5$ 不是 0 和点后的两位数

4

2 回答 2

0

如果我理解你的问题是正确的,你想要这样的东西:

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

这部分基于您的-5$. 不过,通常情况下,$会排在前面,所以你会想要这样的东西:

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

这将允许$-5.00,10+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+)%?"

...您也可以包含数千个分隔符。


我必须承认,我的第二个正则表达式看起来就像一只猫从我的键盘上走过。这里的解释

(\+|-)?可选?的加号或减号。

\d+(,\d{3})*(?!\d)(\.\d*)?一位或多位数字\d+后跟任意数量的千位分隔符加上三位数字(,\d{3})*,后面不跟任何数字(?!\d),以禁止连续四位数字,可选地后跟小数点和任意数量的数字(\.\d*)?

|\.\d+或者一个小数点后跟至少一位数字。

%?最后是一个可选的百分号。

于 2012-06-02T15:44:09.603 回答