我必须asp:TextBox
保持金钱的价值,即“1000”、“1000,0”和“1000,00”(因为俄罗斯标准,逗号是分隔符)。
我ValidationExpression
有什么合适的asp:RegularExpressionValidator
?
我试过\d+\,\d{0,2}
了,但它不允许没有十进制数字的数字,例如只有“1000”。
\d+(,\d{1,2})?
仅当您有十进制数字时才允许逗号,并且根本不允许逗号。问号的含义与 相同{0,1}
,因此在之后\d+
您有零个实例(即没有)或一个实例
,\d{1,2}
正如海伦正确指出的那样,使用非捕获组就足够了,如
\d+(?:,\d{1,2})?
附加?:
意味着括号仅用于将,\d{1,2}
部分分组以供问号使用,但无需记住这些括号内匹配的内容。由于这意味着正则表达式引擎的工作量减少,因此您会获得性能提升。
我们使用这个非常自由的正则表达式进行货币验证:
new Regex(@"^\-?\(?\$?\s*\-?\s*\(?(((\d{1,3}((\,\d{3})*|\d*))?(\.\d{1,4})?)|((\d{1,3}((\,\d{3})*|\d*))(\.\d{0,4})?))\)?$");
它允许所有这些:$0, 0, (0.0000), .1, .01, .0001, $.1, $.01, $.0001, ($.1), ($.01), $(.0001 ), 0.1, 0.01, 0.0001, 1., 1111., 1,111., 1, 1.00, 1,000.00, $1, $1.00, $1,000.00, $1.0000, $1.0000, $1,000.0000, -1, -1.00, -1,000, -1,000. -$1.00, -$1,000.00, -$ 1, -$ 1.00, -$ 1,000.00, $-1, $-1.00, $-1,000.00, $(1), $(1.00), $(1,000.00), $ (1), $ (1.00), $ (1,000.00), ($1), ($1.00), ($1,000.00)
我在javascript中使用了这个:可能在 c# 中对你有用
var entered = '10.00';
var regex = /^\d+(?:\.\d{2})?$/; // starts with N digits optional ".\d\d"
console.log(entered.match(regex));