提取电话号码

时间:2010-10-20 20:49:56

标签: php regex

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

我为它制定的规则是: 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}

事实是,它实际上并没有拾取带有空格或连字符的数字。 可以有人给我一些建议吗?

2 个答案:

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

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

答案 1 :(得分:0)

我不确定是否有可能创建一个匹配每个国家/地区的正则表达式 - 某些国家/地区的规则存在冲突。

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

您可能希望从查看此问题的一些答案开始:

A comprehensive regex for phone number validation

如果你想为每个国家创造一些明确的东西,祝你好运,你可能需要花一些时间来制定一些技术标准......

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