在 PHP 中格式化电话号码

新手上路,请多包涵

我正在开发一个 _SMS 应用程序_,需要能够将发件人的电话号码从 +11234567890 转换123-456-7890 ,以便可以将其与 MySQL 数据库 中的记录进行比较。

这些数字以后一种格式存储,以便在网站的其他地方使用,我不想更改这种格式,因为它需要修改大量代码。

我将如何使用 PHP 来解决这个问题?

谢谢!

原文由 NightMICU 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 469
2 个回答
$data = '+11234567890';

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

原文由 slier 发布,翻译遵循 CC BY-SA 2.5 许可协议

我对一个非常相似(早先提出的)问题( 将 10 位数字字符串格式化为连字符的电话号码])的建议需要很少的修改就可以在这里成功。

有较早的答案使用 sscanf()sprintf() ,但没有人费心将这两个出色的功能放在一起。

格式参数中基于占位符的语法为开发人员提供了高度的控制。对于大多数开发人员来说,定制/维护这种方法应该没有正则表达式那么令人生畏。

vprintf() 允许您声明要使用单个值数组填充的占位符。

代码:( 演示

 $string = '+11234567890';

vprintf('%s-%s-%s', sscanf($string, '+1%3s%3s%4s'));
// 123-456-7890

或者因为只添加连字符,所以可以使用 implode。

 echo implode('-', sscanf($string, '+1%3s%3s%4s'));
// 123-456-7890

原文由 mickmackusa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题