在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个号码。
答案 0 :(得分:7)
查找以下电话号码:
试试这个:
$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
不确定这是否是您要找的。 p>