十进制数的正则表达式(最多 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 个带逗号的十进制数)的主要内容,如果未能解决你的问题,请参考以下文章

十进制数的正则表达式

可被 3 整除的二进制数的正则表达式

0 到 10 范围内任何正或负十进制数的正则表达式

非零和非十进制数的 JQuery 正则表达式验证

使用 PCRE 正则表达式匹配两个二进制数的正确加法

具有数字长度限制的数字的正则表达式,包括小数[关闭]