-1

我在验证区域代码时遇到了正则表达式问题。我的地区代码可能只有一位数字,但也可以是由“-”分隔的数字

例如,我的地区代码可能是以下之一:
6
6-66
77-7

正如你所看到的,我必须至少有一个或多个数字,用'-'分隔,如果它们分开,'-' 符号后面应该有一个数字(不管有多少)。所以 6- 不能被验证为合法的区域代码。我尝试了 2 个小时来解决这个问题,但我不能,所以请帮助我!谢谢!

4

4 回答 4

2
/\d+(-\d+)?$/

这将匹配6, 6-66,77-7 , but not6-`

于 2013-06-14T21:51:27.760 回答
1

如果您要查找的是整个字符串:

/^\d+(?:-\d+)?$/

或类似的东西:

if (parseInt(yourstring.split(/-/)[0])>=eval(yourstring)) alert('true');
else alert('false');

但它更复杂:) 效率更低!如果条件为假,您的代码将崩溃!

于 2013-06-14T21:50:11.753 回答
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
于 2013-06-14T21:57:04.653 回答
0

要快速回答,您可以尝试以下操作:

 /^([0-9])|([0-9]\-[0-9][0-9])|([0-9][0-9]\-[0-9])$/

或者如果您的引擎支持 perl 样式的字符类:

 /^(\d)|(\d\-\d\d)|(\d\d\-\d)$/

这是它的作用:

  1. 在 / 和 / 之间作为定义正则表达式的字符串

  2. \d 代表一位数,也可以写成 [0-9]

  3. () 定义了一个子表达式,因此 (\d) 匹配您的第一个一位数, (\d-\d\d) 第二个三位数样式,最后一个 (\d\d-\d) 第三个变体 -数字地区代码

  4. | 像 (A)|(B)|(C) 一样作为“或”,所以通过结合前三个我们将得到:

    /(\d)|(\d-\d\d)|(\d\d-\d)/

  5. 最后 ^ 表示字符串的开头,而 $ - 字符串的结尾。

还有所谓的 BRE 模式(您必须在每个括号前添加“\”符号),但我认为并非如此。但是,如果您有空闲时间,请考虑任何像这样的快速教程。

于 2013-06-14T22:06:28.107 回答