2011-04-25 106 views
5

我需要一個PHP正則表達式,通過它我可以使用下列標準驗證電話號碼格式:正則表達式(正則表達式)電話號碼隨着國家代碼檢查

  • 不應該包括除數字什麼;
  • 不應該以零開始,因爲我需要將國家代碼作爲前綴;
  • 允許的國家代碼列表應在RegEx中;
  • 緊隨國家代碼後的數字不應爲零;
  • 該號碼的最大長度不應超過13位數字。

我試圖在發佈此問題之前搜索堆棧溢出,但無法找到確切的解決方案。任何幫助將不勝感激。

編輯:我只是想讓用戶輸入有效格式的電話號碼,因爲目前我的客戶在編寫時發生一些愚蠢的格式錯誤。我並不擔心它實際上是有效的(可通話),因爲用戶會親自處理。

Regards

回答

5

我不會在這上面燒我的手指。

僅僅通過查看電話號碼,您無法判斷其是否有效,即使「看起來」有效,它可能不是您要查找的電話號碼(即其他人的電話號碼) 。

您試圖在錯誤的級別解決問題。以驗證電話號碼的唯一方法是實際調用它;)

是足夠的條件的正則表達式:

的國家代碼
/^(1|20|21|..etc)[1-9][0-9]+$/ 

列表(由分隔|後面跟着一個數字)不是0 ,隨後是任意數字的任意數字。

由於國家代碼的長度不同(至少據我所知),您不能在13位長度檢查和國家/地區檢查一個正則表達式。 您可以通過一個通用的正則表達式做13長度的檢查,如:

/^.{,13}$/ 

匹配任何最多13個字符長

+1

我第二個這個。 OP有良好和有效的想法,但提交無效電話號碼的方式有很多,可以通過*任何*模式檢查,但這並不是很重要。 – 2011-04-25 10:21:44

+0

我只希望用戶以有效格式輸入電話號碼。我並不擔心它實際上是有效的,因爲用戶會自己照顧自己。儘管謝謝你的迴應! :) – Saad 2011-04-25 10:28:55

+0

@Saad:這是我所瞭解的一個例子。正則表達式:'(\ d {2,3})(\ d {4})(\ d {6})'測試編號:'911234567890' – abi1964 2011-04-25 11:01:23

3

國家代碼後立即數字不應該是零;

該系統將失敗的意大利。意大利電話號碼的領先0爲從國外撥打。

他們可能是其他一些國家,但意大利是最有名的。

該號碼的最大長度不應超過13位數字。

對於較短的數字,但添加了擴展名,該規則將在多個國家中被打破。

使用3位國家代碼,3位數區號和8位用戶號碼,你是一個數字短。