如何编写仅允许数字且仅含一个非首尾位置逗号的正则表达式
正确正则表达式
^[0-9]+(,[0-9]+)?$
如果所用正则引擎支持字符简写,也可以写成:
^\d+(,\d+)?$
规则说明
你原来使用的[0-9]+(,[0-9]+)*核心问题是末尾用了*量词,允许(,[0-9]+)分组重复多次,所以会匹配到多逗号的字符串,同时没有加首尾锚点,还可能匹配到带其他前后缀的字符串的中间片段。
新正则各部分逻辑:
^锚定字符串开头,避免前缀出现其他非法字符[0-9]+匹配1个及以上的数字,保证逗号前至少有1位数字,杜绝逗号开头的情况(,[0-9]+)?可选分组,?量词限定这个分组最多出现1次:- 分组不出现时,整个正则匹配纯数字字符串
- 分组出现时,必须是逗号加1位及以上数字,保证逗号后有内容,杜绝逗号结尾的情况
$锚定字符串结尾,避免后缀出现其他非法字符
校验示例
- 校验通过:
123456、123,456 - 校验不通过:
,123456、123456,、123,456,789、12a,34
内容的提问来源于stack exchange,提问作者BaldwinIV
相关产品推荐
相关产品推荐

