C# 十进制数的正则表达式(最多3个带逗号的十进制数)

C# 十进制数的正则表达式(最多3个带逗号的十进制数),c#,regex,C#,Regex,如何编写正则表达式来验证只应包含十进制值的输入文本框?该值最多可以有3位小数(但也不能有),以逗号作为分隔符 例如,下面给出的这些值是有效的:- 1,234 1,23 1,2 1 1,234 1,23 1,2 1. 这些是无效的: 1,2345 (too many decimal numbers) A (a letter is not a number) (a space or string empty) 1.234 (used a dot instead of a comma) 12345

如何编写正则表达式来验证只应包含十进制值的输入文本框?该值最多可以有3位小数(但也不能有),以逗号作为分隔符

例如,下面给出的这些值是有效的:-

1,234 1,23 1,2 1 1,234 1,23 1,2 1. 这些是无效的:

1,2345 (too many decimal numbers) A (a letter is not a number) (a space or string empty) 1.234 (used a dot instead of a comma) 12345(十进制数太多) A(字母不是数字) (空格或字符串为空) 1.234(用点代替逗号) 怎么样
@“\d+,?\d{0,3}”
:1个或更多的数字,然后是一个可选的逗号,然后是0到3个数字。这假设您允许逗号前面有任意数量的数字。在您的示例中,只有一个,在这种情况下,您希望删除
+


如果值
1,
无效,则必须将
移到末尾:
@“\d+(,\d{1,3}”)“

您可以使用如下模式:

[0-9]+(,[0-9]{1,3})?
\d+(?:,\d{1,3})?

试着这样做:

[0-9]+(,[0-9]{1,3})?
\d+(?:,\d{1,3})?
解释:-

\d+        # multiple digits
(?:        # start non-capturing group  
  ,        # a comma
  \d{1,3}  # 1-3 digits
)?         # end non-capturing group, made optional

注意:如果在小数点前只需要一个字符,请删除
+

^\d+(,(\d?){3})?$


^   //start
\d+   //one or more decimal digits
(,(\d?){3})?    //a comma, followed by up to 3 decimal digits, optionally
$    //end

如果您不想接受
1,
,那么中间部分可以是
(,\d(\d?{2})?

谢谢,可能是一个解决方案。我喜欢这个,对于正则表达式的初学者来说,这个解决方案是最直接的。就这点而言,
,1
有效吗?这似乎与
1,
匹配,我认为这是一个错误。@pguardiario:OP没有回答这个问题。有可能它是有效的。这更好,但现在你只是重复了Rahul的答案。+1这是正确的答案,但非捕获组实际上只是增加了不必要的复杂性IMO@pguardiario我很确定它不会。。。我对它进行了彻底的测试。是吗?这个在第二条中,3个小数中的每一个都是可选的,这样半开的话你就不需要{1,3}(对不起,我的手机上打错了)