You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现多格式电话号码转E.164格式(支持多欧洲国家)

多格式欧洲电话号码格式化需求

我通过在线表单获取多种格式的电话号码,示例如下:

0123456789
+49 123456789
+49123456789
00123456789
0049 123456789

目前仅处理德国号码,使用的PHP正则格式化代码如下:

$phonenumber = "\+49".preg_replace(array('/^(?:00490?|0490?|\+490?|0)?/','/\D/'),array('',''),$phonenumber);

现在需要新增支持其他欧洲国家,需提取“+”或“00”后的两位国家代码。尝试过正则表达式^\+(\d){2},但会连加号一起选中。了解Google libphonenumber库,但目前仅需处理两位国家代码的号码,觉得该库过于冗余。请问最佳实现方式是什么?


解决方案

可以通过两步正则处理实现需求,既精准提取国家代码,又完成号码格式化:

具体PHP代码实现

// 1. 提取两位国家代码:匹配+XX或00XX开头的情况,本地号码默认用德国代码49
preg_match('/^(?:\+(\d{2})|00(\d{2}))/', $phonenumber, $matches);
$countryCode = !empty($matches[1]) ? $matches[1] : (!empty($matches[2]) ? $matches[2] : '49');

// 2. 清理号码:移除所有前缀(含0、00XX、+XX等)和非数字字符
$cleanNumber = preg_replace(array(
    '/^(?:00\d{2}0?|0\d{2}0?|\+\d{2}0?|0)?/',
    '/\D/'
), '', $phonenumber);

// 3. 拼接标准格式号码
$formattedNumber = "+{$countryCode}{$cleanNumber}";

代码说明

  • 正则/^(?:\+(\d{2})|00(\d{2}))/:用两个捕获组分别提取+后或00后的两位国家代码,避免选中前缀符号
  • 本地号码(无+或00前缀)默认使用德国代码49,可根据实际需求修改默认值
  • 清理步骤先移除各类冗余前缀,再清除所有非数字字符,保证号码主体干净
  • 最终生成+XXYYYYYYYYY的标准国际号码格式

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:05:38