我需要一个正则表达式来测试这样的字符串:
`8 - 12`
`8-12`
`8,9,10,11,12`
`8, 9, 10, 11, 12`
需要测试给定输入是否满足上述格式,或者给出一系列由连字符分隔限制表示的数字(例如8到12),或者用逗号分隔的数字列表。在这两种情况下,都应该忽略空格。
我从哪里开始?
答案 0 :(得分:0)
像
这样的东西\d+\s?[-,]?\s?
也许?
答案 1 :(得分:0)
此表达式应该执行作业/(^\d+\s*?\-\s*?\d+$)|(^\d+(\s*?\,\s*?\d+|$)*$)/
答案 2 :(得分:0)
为了提高正则表达式的易读性,我建议在检查之前删除空格 - 根据迭代次数/数据大小,单独的调用不应该有明显的性能影响。
一个简单的答案:
var str = '8 - 12';
str = str.replace(/\s+/g,'');
var matches = (/^\d+([,-]\d+)+$/).test(str); //Will allow "8-12,13"
一个不太宽容的答案:
var str = '8 - 12';
str = str.replace(/\s+/g,'');
var matches = (/^\d+(-\d+|(,\d+)+)$/).test(str); //Won't allow mixed formats
如果您没有检查整个字符串,您当然可以从表达式中删除^
和$
,即\d+([,-]\d+)+