我对区域代码的验证存在正则表达式问题。 我的区域代码只能是一个数字,但也可以是由' - '
分隔的数字例如,我的区域代码可以是以下之一:
6
6-66
77-7
正如你所看到的,我必须至少有一个数字或数字用' - '分隔,如果它们是分开的,那么' - '符号后面应该有一个数字(无关紧要)。所以6-不得被验证为合法的区域代码。我尝试了2个小时来解决这个问题,但我不能,所以请帮助我!谢谢!
答案 0 :(得分:2)
/\d+(-\d+)?$/
这将匹配6
,6-66,
77-7 , but not
6 -`
答案 1 :(得分:1)
如果你要找的是整个字符串:
/^\d+(?:-\d+)?$/
或类似的东西:
if (parseInt(yourstring.split(/-/)[0])>=eval(yourstring)) alert('true');
else alert('false');
但它更复杂:)效率更低!如果条件为假,您的代码将崩溃!
答案 2 :(得分:0)
var data = ['6', '6-66', '77-7', '6-'];
var len = data.length;
for(var i=0; i<len; ++i) {
var current = data[i];
var result = data[i].match(/^(\d+|\d+[-]\d+)$/);
if(result != null) {
console.log(current);
}
}
--output:--
6
6-66
77-7
答案 3 :(得分:0)
如需快速回答,您可以尝试以下方法:
/^([0-9])|([0-9]\-[0-9][0-9])|([0-9][0-9]\-[0-9])$/
或者你的引擎支持perl风格的角色类:
/^(\d)|(\d\-\d\d)|(\d\d\-\d)$/
这是它的作用:
作为定义正则表达式的字符串
\ d代表一位数,也可以写为[0-9]
()定义一个子表达式,因此(\ d)匹配您的第一个一位数,(\ d- \ d \ d)第二个三位数字样式和最后一个(\ d \ d- \ d) )三位区域代码的第三种变体
|如(A)|(B)|(C)那样“OR”,所以通过组合前三个,我们将得到:
/(\ d)|(\ D- \ d \ d)|(\ d \ D- \ d)/
最后^表示字符串的开头,$ - 结束字符串。
也有所谓的BRE模式(你必须在每个括号前添加“\”符号),但我认为情况并非如此。但是,如果您有空闲时间,请考虑任何快速教程,如this one。