正则表达货币

aba*_*hev 15 .net c# regex asp.net currency

我必须asp:TextBox保持金钱价值,即'1000','1000,0'和'1000,00'(逗号是俄罗斯标准的分隔符).

ValidationExpression有什么用asp:RegularExpressionValidator呢?

我试过\d+\,\d{0,2}但它不允许没有十进制数字的数字,例如只是'1000'.

bal*_*pha 29

\d+(,\d{1,2})?
Run Code Online (Sandbox Code Playgroud)

只有当你有十进制数字时才允许使用逗号,并且根本不允许使用逗号.问号意味着相同{0,1},所以在\d+你有零实例(即没有)或一个实例之后

,\d{1,2}
Run Code Online (Sandbox Code Playgroud)

正如海伦正确指出的那样,使用非捕获组就足够了

\d+(?:,\d{1,2})?
Run Code Online (Sandbox Code Playgroud)

附加?:意味着括号仅用于将,\d{1,2}部件分组以供问号使用,但不需要记住这些括号内匹配的内容.因为这意味着正则表达式的工作量减少,所以可以提高性能.

  • 最好使用非捕获组,因为不需要捕获子匹配. (2认同)

Jad*_*ser 7

我们使用这个非常自由的正则表达式来验证货币:

new Regex(@"^\-?\(?\$?\s*\-?\s*\(?(((\d{1,3}((\,\d{3})*|\d*))?(\.\d{1,4})?)|((\d{1,3}((\,\d{3})*|\d*))(\.\d{0,4})?))\)?$");
Run Code Online (Sandbox Code Playgroud)

它允许所有这些:$ 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.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)