2017-02-09 107 views
0

我试图使用RegExp()接受下列输入:正则表达式为电话号码

  • 12-34-56-78-90
  • 12.34 .56.78.90
  • 12 34.56-7890

我一直在尝试使用方法是:

([0-9]{2,2}[ |-|.]?){4,4}[0-9]{2,2} 

我理解为:(数字2倍,后面跟着空格或 - 或。或什么都不)4次,然后数字2次。

我一直在测试[0-9]{2,2}它甚至不表现为我意料之中的,因为它接受至少 2位数,而不是准确 2位数。

+2

使用锚点,'^'和'$'。 '{2,2}'='{2}'。而''| - |。]'应该写成'[.-]'。 –

+0

你能描述一下什么模式应该匹配,哪些不匹配?也许在开始时删除所有非数字值并比检查长度/区域代码更容易? – Justinas

+0

'|在一个字符类中不是'或'它们是字面字符。 '-'是一个范围。 – chris85

回答

1

这应该满足您的需求(最后一种情况不匹配,如预期):

^\d{2}([ .-]?)\d{2}(?:\1\d{2}){3}$ 

Demo

+0

这是伟大的,thx让我发现regex101.com!然而它不起作用在var exp = new RegExp(“...”); exp.test(MyString的)。我知道这与表达无关,但我使用RegExp。任何提示? –

+0

如果您使用'new RegExp(“...”);',您需要转义所有反斜杠:'^ \\ d {2}([.-]?)\\ d {2}(?:\ \ 1 \\ d {2}){3} $'。直接使用'/^\ d {2}([.-]?)\ d {2}(?:\ 1 \ d {2}){3} $ /。test(mystring)'。请参阅https://jsfiddle.net/sp00m/rvmzyfc0/。 – sp00m

1

var mob=/^([0-9]{2}(\s|\.|\-)){4}[0-9]{2}$/; 
 
console.log(mob.test("12.34.56.78.90")); 
 
console.log(mob.test("12-34-56-78-90")); 
 
console.log(mob.test("12 34 56 78 90"));

var mob=/^([0-9]{2}(\s|\.|\-)?){4}[0-9]{2}$/; 
 
console.log(mob.test("1234567890")); 
 
console.log(mob.test("12 34 56 78 90"));

+0

'(\ s | \。| \ - )'可以被重写'[\ s .-]'; '\ s'包括标签,换页和换行,不确定应该被允许; '[0-9]'可以重写'\ d'。 – sp00m