在字符串中查找电话号码

时间:2011-08-12 17:40:31

标签: php split explode

在PHP中,我正在搜索特定文本中的语音。 我使用explode()来分隔不同部分的文本,使用我正在搜索的城市的区号作为分隔符。问题是包含与区号相同的相同号码的电话号码不能很好地返回。

例如:

"foofoo 010-1234567 barbar"分为"foofoo ""-1234567 barbar"

"foofoo 010-1230107 barbar"分为"foofoo ""-123""7 barbar"

我可以使用第一个用areacode重建phonenummer,但第二个当然错了...

我想我需要一个正则表达式来分割文本,使用某种机制将拆分为短字符串,而不是explode(),但我不知道该怎么做它

在文本中搜索phonenumbers的任何想法或更好的方法?

更新: 的 格式不一致,因此寻找连字符是没有解决方案的。有些电话号码在区号和号码之间有空格,有些有挂钩,有些则没有,等等。荷兰语的电话号码为2,3或4号,通常为10个号码。

3 个答案:

答案 0 :(得分:7)

查找以下电话号码:

  • 010-1234010
  • 010 1234010
  • 010 123 4010
  • 0101234010
  • 010-010-0100

试试这个:

$text = 'foofoo 010-1234010 barbar 010 1234010 foofoo ';
$text .= ' 010 123 4010 barbar 0101234010 foofoo 010-010-0100';

$matches = array();

// returns all results in array $matches
preg_match_all('/[0-9]{3}[\-][0-9]{6}|[0-9]{3}[\s][0-9]{6}|[0-9]{3}[\s][0-9]{3}[\s][0-9]{4}|[0-9]{9}|[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches);
$matches = $matches[0];

var_dump($matches);

答案 1 :(得分:2)

您可以使用正则表达式来匹配电话号码。有许多方法可以为这只特殊的猫提供皮肤(在SO上可能有很多相同的问题),一个超级基本的例子可能如下所示。

$subject = "foofoo 010-1230107 barbar 010-1234567";
preg_match_all('/\b010-\d+/', $subject, $matches);
$numbers = $matches[0];
print_r($numbers);

以上将输出$numbers数组的内容。

Array
(
    [0] => 010-1230107
    [1] => 010-1234567
)

答案 2 :(得分:0)

如果删除所有非数字字符,则只会留下电话号码。然后,您可以接受该字符串并根据需要将其解析为###-###-####

$phone = preg_replace('/\D/', '', 'Some test with 123-456-7890 that phone number');
//$phone is now 1234567890
echo substr($phone, 0, 3);//123
echo subsr($phone, 3, 3);//456
echo substr($phone, 6);//7890

不确定这是否是您要找的。