用PHP格式化电话号码

时间:2014-02-04 22:46:59

标签: php

我有一个存储在数据库中的电话号码,如:

5555555555

我希望将其格式化为:

(555)555-5555

使用php我有以下代码:

<?php
  $data = $order['contactphone'];

  if(  preg_match( '/^\+\d(\d{3})(\d{3})(\d{4})$/', $data,  $matches ) )
      {
        $result = $matches[1] . '-' .$matches[2] . '-' . $matches[3];
        echo $result;
      }
?>

这一次都没有返回任何内容。甚至没有错误。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

将正则表达式从'/^\+\d(\d{3})(\d{3})(\d{4})$/'更改为'/^(\d{3})(\d{3})(\d{4})$/',即:

if(  preg_match( '/^(\d{3})(\d{3})(\d{4})$/', $data,  $matches ) )
      {
        $result = '(' . $matches[1] . ') ' .$matches[2] . '-' . $matches[3];
        echo $result;
      }

答案 1 :(得分:0)

这是我过去使用过的。不像我想的那样优于正则表达式,但它可以完成工作:

/**
 * Formats a phone number
 * @param string $phone
 */
static public function formatPhoneNum($phone){
  $phone = preg_replace("/[^0-9]*/",'',$phone);
  if(strlen($phone) != 10) return(false);
  $sArea = substr($phone,0,3);
  $sPrefix = substr($phone,3,3);
  $sNumber = substr($phone,6,4);
  $phone = "(".$sArea.") ".$sPrefix."-".$sNumber;
  return($phone);
}

P.S。我没有写这篇文章,这只是我六年前抓到的东西。