2016-09-20 210 views
3

获取电话号码,我想正则表达式所查出持续最多12个位数号码通过忽略空格,加号(+),圆括号&破折号,如:正则表达式从字符串

Primary contact number +91 98333332343 call me on this 
My number is +91-983 333 32343 
2nd number +1 (983) 333 32343, call me 
Another one 983-333-32343 
One more +91(983)-333-32343 that's all 
121 street pin code 421 728 & number is 9833636363 

目前,我有一个正则表达式,这确实从字符串获取联系人号码的工作:

/* This only work for the first case not for any other 
    and for last one it outputs "121" */ 

\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+ 

那么,什么可以在这里完成,以支持上述所有情况,总之忽略特殊字符,长度应介于10-12。

回答

4

我看到有数字从10到13位不等。

您可以使用

/(?:[-+() ]*\d){10,13}/g 

regex demo

详细: -

  • (?:[-+() ]*\d){10,13}匹配10至13的序列:
    • [-+() ]* - 零个或多个字符或者是-+(),或空间
    • \d - 一个数字

var re = /(?:[-+() ]*\d){10,13}/gm; 
 
var str = 'Primary contact number +91 98333332343 call me on this\nMy number is +91-983 333 32343\n2nd number +1 (983) 333 32343, call me\nAnother one 983-333-32343\nOne more +91(983)-333-32343 that\'s all\n121 street pin code 421 728 & number is 9833636363'; 
 
var res = str.match(re).map(function(s){return s.trim();}); 
 
console.log(res); 
 

+0

字符串:'+1( - + --- +++ 983)333 32343'匹配.... – passion

+0

@passion:是的,它应该因为任务是*提取“继续最大12位数字长数字忽略空格,加(+),括号和短划线“*,而不是*验证*。为了验证,另一个正则表达式是必要的。如果OP更具体地提取数字格式,我可以提供更“有针对性的”正则表达式,但是这个任务是以非常广泛的方式制定的。 –

0

接受的答案会符合您的标准,但我想提出一个更严格的方法。这是很具体的给你提供的号码格式:

  • 测试特别是如果一个字符串是一个数字/^(\+(\d{1,2})[- ]?)?(\(\d{3}\)|\d{3})[- ]?\d{3}[- ]?\d{4,5}$/
  • 测试一个字符串是否包含至少一个数字:/(\+(\d{1,2})[- ]?)?(\(\d{3}\)|\d{3})[- ]?\d{3}[- ]?\d{4,5}/

我给你做一个小小提琴,你可以在任何数量的...数字上尝试不同的正则表达式:https://jsfiddle.net/u51xrcox/5/

乐趣。