【问题标题】:Regular Expression for decimal numbers (at max 3 decimal numbers with comma)十进制数的正则表达式(最多 3 个带逗号的十进制数)
【发布时间】:2013-08-29 08:38:17
【问题描述】:

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

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

1,234 1,23 1,2 1

这些无效:

1,2345(十进制数太多) A(字母不是数字) (空格或字符串为空) 1.234(使用点而不是逗号)

【问题讨论】:

  • ,1 是否有效?

标签: c# regex


【解决方案1】:

试试这样的:

\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

【讨论】:

  • +1 这是正确的答案,但非捕获组实际上只是增加了不必要的复杂性 IMO
【解决方案2】:

你可以使用这样的模式:

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

【讨论】:

  • 谢谢,可能是一个解决方案。 L
  • 我喜欢这个,对于正则表达式的初学者来说,这个解决方案是最直接的。
【解决方案3】:

@"\d+,?\d{0,3}" 怎么样:1 个或多个数字,然后是可选的逗号,然后是 0 到 3 个数字。这假设您允许逗号前有任意数量的数字。在您的示例中,您只有一个,在这种情况下,您需要删除 +

如果值 1, 无效,您必须将 ? 移到末尾:@"\d+(,\d{1,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}
  • (抱歉打错了,是手机打的)
猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多