带有逗号分隔符的数字的正则表达式验证
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
,拒绝1
、1,2,3
。以上是关于带有逗号分隔符的数字的正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章