2017-08-25 175 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