【问题标题】:preg_match_all pattern to get phone numberspreg_match_all 模式来获取电话号码
【发布时间】:2014-09-22 12:33:17
【问题描述】:

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

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

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

我如何使用 preg_match_all 来查找排名靠前的数字?

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

它们都可能以+9898 开头对于国家代码,

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

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

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

【问题讨论】:

  • 你想找到以0开头的号码吗?
  • @AvinashRaj 不,它可能以 9 或 0 开头
  • And then phone number Must start with 9 ?请添加一些应与您的模式匹配的示例字符串,也不应与您的模式匹配
  • @AvinashRaj 对不起,这是错误的,我会解决的。

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


【解决方案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
        )

)

【讨论】:

  • And then phone number Must start with 9 OR 0.
【解决方案2】:

试试这个:

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

查看演示:http://regex101.com/r/rG6qE8/1

【讨论】:

  • 谢谢,但问题是它会获取一些垃圾邮件值,我如何设置长度必须大于 5?
  • 您可以在末尾添加 {5,} 或将 + 替换为 {9,},就像之前一样。
  • \d{9,} 将匹配 9999999999999999999999999999999999999999999999,这是一个有效的电话号码吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多