C# 十进制数的正则表达式(最多3个带逗号的十进制数)
如何编写正则表达式来验证只应包含十进制值的输入文本框?该值最多可以有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(用点代替逗号) 怎么样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
@“\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}(对不起,我的手机上打错了)