我在验证区域代码时遇到了正则表达式问题。我的地区代码可能只有一位数字,但也可以是由“-”分隔的数字
例如,我的地区代码可能是以下之一:
6
6-66
77-7
正如你所看到的,我必须至少有一个或多个数字,用'-'分隔,如果它们分开,'-' 符号后面应该有一个数字(不管有多少)。所以 6- 不能被验证为合法的区域代码。我尝试了 2 个小时来解决这个问题,但我不能,所以请帮助我!谢谢!
我在验证区域代码时遇到了正则表达式问题。我的地区代码可能只有一位数字,但也可以是由“-”分隔的数字
例如,我的地区代码可能是以下之一:
6
6-66
77-7
正如你所看到的,我必须至少有一个或多个数字,用'-'分隔,如果它们分开,'-' 符号后面应该有一个数字(不管有多少)。所以 6- 不能被验证为合法的区域代码。我尝试了 2 个小时来解决这个问题,但我不能,所以请帮助我!谢谢!
/\d+(-\d+)?$/
这将匹配6
, 6-66,
77-7 , but not
6-`
如果您要查找的是整个字符串:
/^\d+(?:-\d+)?$/
或类似的东西:
if (parseInt(yourstring.split(/-/)[0])>=eval(yourstring)) alert('true');
else alert('false');
但它更复杂:) 效率更低!如果条件为假,您的代码将崩溃!
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
要快速回答,您可以尝试以下操作:
/^([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) 一样作为“或”,所以通过结合前三个我们将得到:
/(\d)|(\d-\d\d)|(\d\d-\d)/
最后 ^ 表示字符串的开头,而 $ - 字符串的结尾。
还有所谓的 BRE 模式(您必须在每个括号前添加“\”符号),但我认为并非如此。但是,如果您有空闲时间,请考虑任何像这样的快速教程。