preg_match_all模式获取电话号码


preg_match_all pattern to get phone numbers

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

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

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

如何使用preg_match_all查找最前面的数字?

它们可能有空间,也可能没有。

所有这些可能都以+9898开头。对于国家代码,

然后电话号码必须以90开头

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

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

我想你想要这样的东西,

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

演示

<?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
        )
)

试试这个:

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

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