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