2009-10-14 53 views
1

這是正則表達式我用匹配的電話號碼,如:正則表達式與國家代碼相匹配的電話號碼

00 00 00 00 00 
00 00 0 00 00 00 00 
+00 0 00 00 00 00 

(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 

我試圖把它列入到我的JavaScript,但它不是真正的工作

if(document.maj_profil.phone.value.search(/^\(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)/) == -1) 
    { 
    displayDialog('wrong phone format') 
     } 
+1

當然那些\\\(\\\)的是錯誤的?在你的例子中,電話號碼周圍沒有括號。 – 2009-10-14 14:20:04

+0

您的用戶是否必須輸入1個電話號碼,還是必須輸入全部3個電話號碼? – jantimon 2009-10-14 14:22:06

+0

只有一個,但有3種可能的格式 – Roch 2009-10-14 14:28:15

回答

3
  1. 你有你的替代格式列出,如:

    (...)\s+(...)\s+(...) 
    

    變化,要使用|(OR)運算符:

    (...)|(...)|(...) 
    
  2. 不要逃避括號。 \(\)應該簡單地爲()

  3. 在你的第三組+之初應該用反斜槓轉義:

    (\+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 
    
+0

非常感謝它,它完美的作品 – Roch 2009-10-14 14:39:33

1

試試這個:

\d\d(\s+\d\d){4}|(\d\d\s+\d\d\s+\d|\+\s+\d)\d\d(\s+\d\d){3} 

這意味着:

\d\d(\s+\d\d){4} // 00 00 00 00 00 

|     // OR 

(     // (
    \d\d\s+\d\d\s+\d // 00 00 0 
    |     // OR 
    \+\s+\d   // + 0 
)     //) 
\d\d(\s+\d\d){3} // 00 00 00 00 
0

在JavaScript,你躲過所有的括號內。你希望它們表現爲捕獲組還是要匹配字符串中的實際括號?

也使用測試代替搜索。測試返回true或false,而不是數字。

0

轉義括號會將它們轉換爲文字。嘗試沒有逃逸:

/^(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})/ 
0

試試這個:

var re = /^\+?(\d{1,2} ?)+$/g 
var phone = "00 00 00 00 00"; //"00 00 00 00 00x"; 
if(!re.test(phone)) 
    alert("wrong phone pattern");