我有 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})?))\)?<*>quot;);

它允许所有这些: $ 0,0,(0.0000),。1,.01,.0001,$ .1,$ .01,$ .0001,($ .1),($ .01),$(。0001),0.1,0.01 ,0.0001,1,1111,1,111。,1,100,1,000.00,$ 1,$ 1.00,$ 1,000.00,$ 1.0000,$ 1.0000,$ 1,000.0000,-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),$(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));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top