首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取电话号码

提取电话号码
EN

Stack Overflow用户
提问于 2010-10-21 04:49:56
回答 2查看 375关注 0票数 1

我在试着从一组数据中提取电话号码。它必须能够从每个国家提取国际和本地号码。

我为它制定的规则是: 1.查找国际符号,表示它是具有有效分机(从+1到+999)的国际拨号号码。2.如果存在加号,请确保下一个字符是数字。3.如果没有,请查看长度以验证其长度是否在7到10位之间。4.如果数字被连字符(-)或空格分割(通过国际标准正确),请确保它们之间的位数为3或4

我得到的var是:

代码语言:javascript
复制
\+(?=[1-999])(\d{4}[0-9][-\s]\d{3}[0-9][-\s]\d{4}[0-9])|(\d{7,11}[0-9])

这是针对国际的,而本地搜索是\d{7,10}

问题是,它实际上不会提取包含空格或连字符的数字。有人能给我一些建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-21 05:00:18

\d已经意味着“数字”,所以你不应该在它后面放另一个[0-9] (意思是一样的)。

同样,[1-999]也不是你想的那样。它实际上匹配1到9之间的一(1)位数字。您可能想要\d{1,3},尽管它也会匹配0

那么,您只允许一种划分块的变体(4-3-4) -为什么?这不会匹配很多有效的电话号码。

我会提出以下建议:

使用正则表达式\+?(?=\d)[\d\s-]{7,13}\b搜索字符串,以获取任何远程看起来像电话号码的内容。也许您还想在允许的字符列表中包括圆括号和斜杠:\+?(?=\d)[\d\s/()-]{7,14}\b

然后分别处理和验证这些字符串,最好在删除所有标点符号/空格(除了+)之后。

票数 1
EN

Stack Overflow用户

发布于 2010-10-21 05:02:07

我不确定是否有可能创建一个匹配每个国家的正则表达式--一些国家有相互冲突的规则。

例如,在一个有效的国际号码中包含两个有效的本地号码是完全可能的。

你可能想先看看这个问题的一些答案:

A comprehensive regex for phone number validation

如果你想为每个国家创建一些明确的东西,祝你好运,你可能需要花一些时间学习一些技术标准……

177186-0039-011-81-90-1177-1177都是同一国家的有效电话号码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3982186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档