带有逗号分隔符的数字的正则表达式验证

Posted

技术标签:

【中文标题】带有逗号分隔符的数字的正则表达式验证【英文标题】:Regex validation for numbers with comma separator 【发布时间】:2011-03-28 05:25:47 【问题描述】:

需要一个正则表达式来验证带有逗号分隔符的数字。 1,5,10,55 有效,但 1,,,,10 无效。

【问题讨论】:

附带说明 - 正则表达式可以验证您的输入,但不能解析它(除非您 match\d+)。如果您的下一步是拆分字符串,您最好在验证之前拆分它。接下来,jQuery 适合什么地方呢?它是一个验证插件吗? 是的,我想使用 jquery 验证插件来验证一个字符串。 【参考方案1】:

应该这样做:

^\d+(,\d+)*$

正则表达式相当简单:\d+ 是第一个数字,后面是可选的逗号和更多数字。

您可能想在您认为合适的地方输入\s*,或在验证之前删除所有空格。

要允许负数将\d+ 替换为[+-]?\d+ 要允许分数:将\d+ 替换为[+-]?\d+(?:\.\d+)?

【讨论】:

【参考方案2】:

以下是我们将要使用的正则表达式的组件:

\d 是数字字符类的简写 + 是一个或多个重复说明符 * 是零个或多个重复说明符 (...) 进行分组 ^$ 分别是行锚的开始和结束

我们现在可以编写我们需要的正则表达式了:

^\d+(,\d+)*$

即:

from beginning...
|    ...to the end
|          |
^\d+(,\d+)*$              i.e. ^num(,num)*$
 \_/  \_/ 
 num  num

请注意,* 表示只允许一个数字。如果您坚持使用至少两个数字,请改用+。您还可以将 \d+ 替换为另一个模式以允许数字,例如符号和/或小数部分。

参考文献

regular-expressions.info/Repetition, Character Classes, Grouping, Anchors

高级主题:优化

您可以选择使括号不捕获以提高性能:

^\d+(?:,\d+)*$

如果风格支持它,你可以在这种情况下使所有重复占有

^\d++(?:,\d++)*+$

参考文献

regular-expressions.info/Possessive

【讨论】:

【参考方案3】:
^[0-9]*(,)1[0-9]*/

试试这个

【讨论】:

好吧,1 是多余的,捕获组也是如此。这与\d*,\d* 相同 - 它必须有一个逗号,周围有可选数字;不完全是这里的要求。它接受,12,34,34,拒绝11,2,3

以上是关于带有逗号分隔符的数字的正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章

用逗号作为小数分隔符的数字的 Google 表单正则表达式

简单的js正则表达式问题

正则表达式将数字转换为逗号分隔的数字,可选两位小数

通过正则表达式获取逗号分隔的数字

如何使用正则表达式验证逗号分隔的字符串 [重复]

在逗号分隔的字母数字正则表达式中添加空格