preg_match_all模式获取电话号码

时间:2014-09-22 12:33:17

标签: php regex parsing preg-match preg-match-all

我已尝试多次使用preg_match_all获取一些电话号码。

我想要得到的东西,没有问题是这些结构:

09123456789
+989123456789
989123456789
0912 345 6789
+98 912 345 6789

如何使用preg_match_all查找顶部数字?

他们可能有空格。

所有这些都可能以+9898国家/地区代码

开头

然后拨打号码必须以90开头。

我试过这样:(但它并不适用于所有人)

/[+989][09]*([0-9]{9,})/i

2 个答案:

答案 0 :(得分:1)

试试这个:

(((\+?98)?|0) ?9[\d ]+)

请参阅演示:http://regex101.com/r/rG6qE8/1

答案 1 :(得分:1)

我想你想要这样的东西,

(?:\+?98|0)(?:\s*\d{3}){2}\s*\d{4}

DEMO

<?php
$str = <<<EOT
09123456789
+989123456789
989123456789
0912 345 6789
+98 912 345 6789
EOT;
$regex =  '~(?:\+?98|0)(?:\s*\d{3}){2}\s*\d{4}~';
preg_match_all($regex, $str, $matches);
print_r($matches);
?>

输出:

Array
(
    [0] => Array
        (
            [0] => 09123456789
            [1] => +989123456789
            [2] => 989123456789
            [3] => 0912 345 6789
            [4] => +98 912 345 6789
        )

)