2017-08-25 14 views
0

私は、オーストラリアの電話番号の一部をマッピングするための正規表現を作成しようとしています。Regexオーストラリアの電話番号

今まで私は、それは次のよう

\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}))?

での作業ここではそれをテストするためのリンクのGot:

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

がPS:

:正規表現はまたのために働いています

+ 610491570156、+ 61 04 9157 0156、+614 9157 0156、他

私はまた、このように電話番号を持つことの可能性を追加したいと思いますしかし:

+61 491 570 156

そして、それは他の1(のグループと同じように私の電話番号をマッピングしています)

どのように私はそれを達成するために変更する必要がありますか?

+0

正規表現を実行するために、すべての非数字を置き換えることができます11.オーストラリアの電話番号は数字の数字が異なりますか? – zer00ne

+0

これは、一致する必要がある長いテストサンプルのリストを提供する場合に役立ちます。 – linden2015

+0

または少なくともいくつかはすべて同じ桁数を持っています – zer00ne

答えて

0

あなたは、入力を正規化して、他の人が持っている間、いくつかの電話番号は12桁の数字を持っている

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番目のバージョンを書くべきではないという事実は変わりません。新しいやり方で壊れてしまいます。 –

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図書館を使用していない場合は、質問に書かなければなりません。できれば理由を説明することができます。 –

関連する問題