2012-05-04 49 views
0

我已經創建了一個reg精通,這基本上可以讓我喜歡讓所有格式。然而,仍然有一個小問題,與()...正則表達式驗證電話

^\(?(\+?\d+)?\)? ?\d*(-?\d{2,3} ?){0,4}$ 

這將是有效的:(+ 356-123 456 78,但它不應該....同爲+356) - 123 456 78.

任何人知道如何確保模式既包含()或沒有?

+0

http://stackoverflow.com/questions/9370903/java-regex-replacing-a-phone-number-including-optional-parentheses – Marc

回答

2

試試這個:

^(?:\((\+?\d+)?\)|\+?\d+) ?\d*(-?\d{2,3} ?){0,4}$ 

它允許區號要麼有一個區域代碼括號或不。

+0

謝謝,這是我所追求的! – Jeffrey

3

首先,請注意你不能寫一個正則表達式來檢查的括號。如果你只允許一對圓括號,你可以制定一個正則表達式來確保它們既存在也不存在。但是,如果你想允許任意數量的括號,但只能成對使用,正則表達式不足以完成這項工作;你需要一個實際的解析器。

就個人而言,我只想剝奪任何東西,但數字,空格的電話號碼,以及+標誌。這是ITU-T標準E.123推薦的國際符號,並且不需要擔心括號。

+1

+1聽人。 – rjz

+0

你可以使用反向引用等方式來做到這一點,但是值得所有的麻煩嗎? – siride

+0

*「你不能寫一個檢查平衡圓括號的正則表達式」* - 例如。 '((?R)* \)' – Qtax

0

處理最簡單的方法是剝離非數字和電話號碼字段空白標準化。人們需要輸入許多愚蠢的電話號碼格式。我建議2個步驟:

// Strip non-numbers and whitespace 
var cleanPhone = phoneNumber.replace(/[^0-9\s]/, ""); 

// All whitespace are now single spaces 
cleanPhone = cleanPhone.replace(/\s+/, " "); 

if(cleanPhone.match(/* place your (now simple) validation regex here */)) { 
    // Valid! 
} 
相關問題