2017-02-09 176 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