簡體   English   中英

用於澳大利亞電話號碼驗證的正則表達式

[英]Regex for Australian phone number validation

我嘗試在正則表達式下進行電話號碼驗證,但沒有正常工作,

^([+61|0](2|4|3|7|8|)){0,2}([ 0-9]|[(]){2,3}([)]|[0-9]){6}([ ])[0-9]{7,20}$

以下是我希望通過驗證的示例

+61(02)89876544
+61 2 8986 6544
02 8986 6544
+61289876544
0414 570776 
0414570776
0414 570 776
+61 414 570776
+61 (0)414 570776

也接受以下字符。 ()-+ 空格

那就是電話號碼結構。 最簡單的解決方案是要求用戶以特定格式輸入或讓表單自動格式化。 如果你必須使用正則表達式,這就是我提出的:

^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})$

捕獲組:

  1. 國家代碼(可選)
  2. 區域/提供者代碼(可選)
  3. 電話號碼

演示: https//regex101.com/r/dkFASs/6

這就是我過去常用的格式: https//en.wikipedia.org/wiki/Telephone_numbers_in_Australia

在處理這樣一個更大的正則表達式時,我發現最常用的方法是將測試用例放到像regex101.com這樣的工具中,然后通過捕獲組捕獲組(如果可以,則命名它們),直到結束。 一旦一組不匹配,就改變你已有的組,直到它完成。

編輯2019:由於這個問題偶爾會引起注意,我想要注意,如果可能的話,最好使用驗證庫。 我的建議是谷歌的i18n電話號碼庫 它比正則表達式更強大。

我會首先從電話號碼中刪除所有空格,因為更多模式將意味着更復雜的正則表達式,然后應用以下內容:

(?:\+?61)?(?:\(0\)[23478]|\(?0?[23478]\)?)\d{8}

據我所知,它有效。

將盡快寫下解釋

我對@ 3ocene的回復進行了投票。 但后來發現並不符合我的情況。

這是我的測試用例(非詳盡):

+(61) 455 562 400
+61-455-562-400
+61 455 562 400
+(61)-455-562-400
+(61) 455 562 400
(02) 4371 3164
(02) 4371-3164
02 80268989
03 80268989
04 80268989
05 80268989
433245898
433 245 898
433-245-898
4555-62400
123456
08 54 587 456

123456是否定的..

這就是我建立的,所以它可以幫助這里的人:

(\(+61\)|\+61|\(0[1-9]\)|0[1-9])?( ?-?[0-9]){6,9}

這是Regexer鏈接:

https://regex101.com/r/eiufOH/2

嘗試這個

\b([\+-]?\d{2}|\d{4})\s*\(?\d+\)?\s*(?:\d+\s*)+\b

修改 SydMK 以包括 13、180、19、1300、1800、1900

13 xxxx 和 1300 xxx xxx – “本地費率”呼叫,VoIP 和移動電話用戶除外

180 xxxx 和 1800 xxx xxx – FreeCall

19 xxxx 和 19xx xxxx – 高級短信

^(\+?\(61\)|\(\+?61\)|\+?61|1[ \-]{0,1}(3|80|9|300|800|900)|\(0[\d]\)|0[\d])?(( ?-?[\d]){8,9}|[\d]{4})$

https://regex101.com/r/dqsaHM/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM