正则表达式澳大利亚电话号码

时间:2017-08-25 21:40:56

标签: javascript 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}))?

这是测试它的链接:

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

PS:REGEX也在为:

工作

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

但是,我想添加这样的电话号码的可能性:

+61 491 570 156

让它以与另一个(群组)相同的方式映射我的号码

有没有人知道如何改变以实现这一目标?

2 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以替换所有非数字以标准化输入,然后运行正则表达式

&#13;
&#13;
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
&#13;
&#13;
&#13;