繁体   English   中英

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

[英]Regex to fetch phone number from string

我想要正则表达式,通过忽略空格,加上(+),括号和破折号,找出最多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之间。

我看到有10到13位数字。

你可以用

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

请参阅正则表达式演示

细节

  • (?:[-+() ]*\\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); 

接受的答案符合您的标准,但我想提出一种更严格的方法。 它特别针对您提供的数字格式:

  • 具体测试一个字符串是一个数字/^(\\+(\\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/

玩得开心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM