2017-08-25 84 views
0

我一直在試圖創建一個正則表達式來映射部分澳大利亞電話號碼。正則表達式澳大利亞電話號碼

直到現在我得到了它具有以下

\s*(\+61|61|061)?\s*[^\d\(]?\s*(\(?([0-8][2-8]{0,1})\)?\s*[\D]?\s*([0-9]{4})\s*[\D]?\s*([0-9]{4}))(?:\D{0,16}(\d{0,8}))?

工作這裏有一個鏈接進行測試:

https://regex101.com/r/jN2fU8/13

PS:正則表達式也工作:

+ 610491570156,+61 04 9157 0156,+614 9157 0156,其他

不過我想也增加了可能性,具有電話號碼是這樣的:

+61 491 570 156

並將其映射我的電話號碼相同的方式,另外一個(組)

有沒有人有我應該如何改變來實現這個想法?

+0

一些電話號碼有12位數字,而另一些11.澳大利亞電話號碼的數字是否有所不同? – zer00ne

+0

如果您提供需要匹配的測試示例的長列表,它會有所幫助。 – linden2015

+0

或者至少有幾個具有相同數量的位數 – zer00ne

回答

0

您可以取代所有的非數字正常化的輸入,然後運行正則表達式

var phoneNumber = '+061 04 9157 0156' 
 
var text = phoneNumber.replace(/[^\d]/g,''); 
 

 
console.log(text);//061491570156 
 
    
 
var regex = /0?(61)0?(\d{1,2})(\d{4})(\d{4})/g; 
 
    
 
var matcher = regex.exec(text); 
 
    
 
console.log(phoneNumber)//+061 04 9157 0156 
 
console.log(matcher[0])//061491570156 
 
console.log(matcher[1])//61 
 
console.log(matcher[2])//4 
 
console.log(matcher[3])//9157 
 
console.log(matcher[4])//0156

+0

這是一種非常有用的技術,但它不會改變OP不應該爲澳大利亞電話號碼編寫第89版正則表達式的情況,這將最終以新的和特殊的方式被破壞。 – 2017-09-26 14:03:28

5

解析電話號碼一般是一團糟。我建議使用像libphonenumber-js這樣的庫。

const formatted = new libphonenumber.asYouType().input('+61 491570156'); 
 
console.log(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/0.4.27/libphonenumber-js.min.js"></script>

+0

對不起。我無法使用任何圖書館。我應該用正則表達式來做,但是感謝解決方案。 –

+0

@ HugoS.Mendes如果不使用圖書館是一項要求,那麼你應該在問題中寫下,最好是解釋爲什麼你不能或不想。 – 2017-09-26 14:05:12