2010-12-09 131 views
3

我需要一個正則表達式來匹配電話號碼。我只想知道這個號碼是否可能是一個電話號碼,它可以是任何電話格式,美國或國際。所以我制定了一個策略來確定它是否匹配。用於匹配電話號碼的正則表達式

我希望它接受以下字符:0-9以及,.()-並且可選地以+(對於國際號碼)開頭。如果字符串中有其他字符,則該字符串不應匹配。

我嘗試這樣做:

/\+?[0-9\/\.\(\)\-]/ 

但有+在號碼中間的電話號碼一致。它匹配包含字母字符的數字(我不想那麼做)。

最後,我想將最小長度設置爲9個字符。

有什麼想法?

感謝您的幫助,我顯然不是正則表達式的東西:)

+0

不幸的是,只有允許號碼成爲有效的電話號碼對於國際來說是非常麻煩的。國際號碼的長度和風格差異很大。然而,可以說你想要一個9位或更多的號碼,就像他在下面做的那樣。 – m4tt1mus 2010-12-09 05:31:21

+0

可能重複的[電話號碼驗證綜合正則表達式](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark 2012-01-17 15:32:32

回答

4

好太快了,你是八九不離十。試試這個:

^\+?[0-9\/.()-]{9,}$ 

沒有開始和結束的錨你允許部分匹配,因此它可以從字符串匹配:-)+123+123

如果你想有一個最低的9個數字,而不是任何字符(所以---...///是無效的),你可以使用:

^\+?[\/.()-]*([0-9][\/.()-]*){9,}$ 

,或者使用前瞻 - 字符串匹配型的前[0-9/.()-]*正則表達式引擎正在尋找(\D*\d){9},這是一個9位數字,每個數字可能在其他字符前面(我們稍後會驗證)。

^\+?(?=(\D*\d){9})[0-9\/.()-]*$ 
+1

+1這確實回答了在這個問題。定義電話號碼的國際電聯標準可能值得一提:http://en.wikipedia.org/wiki/E.164 – msw 2010-12-09 05:19:44

1

它與alpha字符匹配的原因是因爲期間。你必須逃避它。我不知道你用的是什麼編輯對於這一點,這就是我將使用VIM:

^+\?[()\-\.]\?\([0-9][\.()\-]\?\)\{3,\}$ 
0

的juqeury對美國的電話驗證的插件。檢查這個link。您還可以在源代碼中看到正則表達式。