是否可以创建一个“动态”折扣掩码,将%或数字作为折扣值?这样做的简单方法是什么? valide输入的样本:-25%或0.25或-5 $不是0和点后的两位数
答案 0 :(得分: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+
或者小数点后跟至少一位数。
%?
最后是一个可选的百分号。
答案 1 :(得分: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