十进制数的正则表达式(最多 3 个带逗号的十进制数)
Posted
技术标签:
【中文标题】十进制数的正则表达式(最多 3 个带逗号的十进制数)【英文标题】:Regular Expression for decimal numbers (at max 3 decimal numbers with comma) 【发布时间】:2013-08-29 08:38:17 【问题描述】:如何编写一个正则表达式来验证应该只包含十进制值的输入文本框?该值最多可以有 3 位小数(但也可以没有),以逗号作为分隔符。
例如,下面给出的这些值是有效的:-
1,234 1,23 1,2 1这些无效:
1,2345(十进制数太多) A(字母不是数字) (空格或字符串为空) 1.234(使用点而不是逗号)【问题讨论】:
,1
是否有效?
【参考方案1】:
试试这样的:
\d+(?:,\d1,3)?
解释:-
\d+ # multiple digits
(?: # start non-capturing group
, # a comma
\d1,3 # 1-3 digits
)? # end non-capturing group, made optional
【讨论】:
+1 这是正确的答案,但非捕获组实际上只是增加了不必要的复杂性 IMO【参考方案2】:你可以使用这样的模式:
[0-9]+(,[0-9]1,3)?
【讨论】:
谢谢,可能是一个解决方案。 L 我喜欢这个,对于正则表达式的初学者来说,这个解决方案是最直接的。【参考方案3】:@"\d+,?\d0,3"
怎么样:1 个或多个数字,然后是可选的逗号,然后是 0 到 3 个数字。这假设您允许逗号前有任意数量的数字。在您的示例中,您只有一个,在这种情况下,您需要删除 +
。
如果值 1,
无效,您必须将 ?
移到末尾:@"\d+(,\d1,3)?"
【讨论】:
这似乎与1,
匹配,我认为这是一个错误。
@pguardiario:OP 没有回答这个问题。引用可能是有效的。
这样更好,但现在您只是重复了 Rahul 的回答。【参考方案4】:
请注意,如果您只希望小数点前一个字符,请删除+
^\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)?
【讨论】:
@pguardiario 我很确定它不会......我对它进行了非常彻底的测试。你是否?这 ?在第二个子句中,3 个小数中的每一个都是可选的,这样你就不需要 1,3 (抱歉打错了,是手机打的)以上是关于十进制数的正则表达式(最多 3 个带逗号的十进制数)的主要内容,如果未能解决你的问题,请参考以下文章