2010-10-20 126 views
1

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

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

我所拥有的var为:

\+(?=[1-999])(\d{4}[0-9][-\s]\d{3}[0-9][-\s]\d{4}[0-9])|(\d{7,11}[0-9]) 

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

的事情是,它实际上并没有在它的空格或连字符拿起号码。 有人可以给我一些建议吗?

+0

可能重复或电话号码验证](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – EboMike 2010-10-20 21:20:02

回答

1

\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

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

0

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

完全有可能具有例如两个有效的本地号码包含在1个有效国际号码内。

你可能想通过寻找一些答案,这个问题开始:

A comprehensive regex for phone number validation

如果你正在寻找创造一些明确的对每一个国家,运气好的话,你可能会需要花费一段时间的一些技术标准...

即两个177186-0039-011-81-90-1177-1177是有效的电话号码储存在同一个国家[综合正则表达式的F