2008-11-26 61 views
8

我能做些什麼來全面驗證澳大利亞電話號碼?我需要這個爲我正在寫的應用程序。你可以假設它是從澳大利亞境內撥打的。我想要使​​用白名單方法。您將使用什麼規則來驗證澳大利亞電話號碼?

這裏是我的規則迄今(除去任何空白後): -

  1. 開始與圖13和是6位長
  2. 始於1300和爲10位長
  3. 從0開始(但不是0011,因爲這是國際撥號)和爲10位長
  4. 始於61,接着的9位數字
  5. 開始與(0_),接着8位(其中_是1-9)

有什麼我錯過了?

區域代碼是必需的,因爲當用戶處於不同的狀態時,我們可能在一種狀態下從傳真服務器發送傳真。

(我不是問如何使上述規則中的正則表達式,但如果這些規則是正確的)。

參見:
UK Phone Numbers
US Phone Numbers

+0

如果你而不是詢問如何編程(正則表達式或其他方式,這對於本站來說似乎相當不重要) – ahockley 2008-11-26 23:29:38

+0

在那裏,爲您解決了這個問題。 :-) – paxdiablo 2008-11-27 00:39:22

+0

從可用性的角度來看,允許奇數的其他字符大方。爲什麼要求平衡的支持者?如果有人在沒有關閉的情況下錯誤輸入一個文件,誰在乎!另請考慮使用破折號或句點分隔號碼組的人員。 – 2009-02-01 19:26:24

回答

0

我會忍不住以刪除括號爲好。我仍然偶爾看到像「(0212)34 5678」這樣的電話號碼。

還有008號碼在使用嗎? 1800怎麼樣?我認爲這是一個類似於現在1300的有效前綴。

1

0011不是唯一的國際接入碼。例如,通過傳真呼叫海外,您應該使用0015 - 它可以避免壓縮的語音剪切效果,這對傳真(或數據,如果您碰巧使用調制解調器)不利。我的辦公室電話數據庫在某些國際傳真號碼上有0015前綴。還有其他特殊用途的國際撥號代碼。

我仍然看到寫爲(0411)123 456

8

手機號碼我做了類似的事情,前一陣子。不可思議的木魚提到的維基百科頁面是一個很好的起點。

由於一年前,我的規則看起來是這樣的:

02[3-9]\d{7} NSW/ACT 
03[4-9]\d{7} VIC/TAS 
07[3-9]\d{7} QLD 
08\d{8}  SA/NT/WA 

04[\d]{8}  Moblies 04x[123] = Optus, 04x[456] = Voda, 04x[0789] = Telstra 

0500[\d]{6} Find me anywhere server 
0550[\d]{6} VoIP 
059[\d]{7} Enum 

13[\d]{4}  Local rate 
1300[\d]{6} Local rate 

1800[\d]{6} Free call 

0198[\d]{2} Data networks (local call anyway I think) 
0198[\d]{6} 

190[\d]{7} Premium rate 
2

建立在以前的一些答案(我將使用Regexs,因爲它是整潔):

  1. 刪除任何空格或匹配()對
  2. 如果以下匹配之一,則返回數:
    1. 1 [38] [0-9] {4}
    2. 1300 [0-9] {6}
    3. ([(0),(+ 61)] [23478]){0,1} [1-9] [0-9] {7}

請注意,有效的區號是[23478]。我還假設1800個數字仍然存在。我想可能還有1900個數字。

此外,000和112是有效的緊急號碼:根據您的具體使用情況,您可能希望明確允許或拒絕這些號碼。如果您存儲'這是我的電話號碼',那麼您可能會想要禁用緊急號碼,但對於撥號計劃之類的內容,您希望允許它們。

1

對於一個明確的清單,嘗試https://github.com/googlei18n/libphonenumber

谷歌的常見的Java,C++和JavaScript庫,用於分析,格式化,存儲和驗證的國際電話號碼。 Java版本針對在智能手機上運行進行了優化,並且自4.0版以來一直由Android框架使用(冰淇淋三明治)。

你可以在這裏進行測試:https://rawgit.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/demo-compiled.html

這是矯枉過正的方式爲我的小工作,我概括我的測試,但該庫將允許您測試您的規則:)

相關問題