正则表达式从字符串中获取电话号码

时间:2016-09-20 06:30:31

标签: javascript regex

我希望正则表达式通过忽略空格,加上(+),括号和&来找出最长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之间。

2 个答案:

答案 0 :(得分:5)

我看到有10到13位数字。

您可以使用

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

请参阅regex demo

<强>详情:

  • [-+() ]* - 匹配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); - 数字

{{1}}

答案 1 :(得分: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/

玩得开心。