正在加载,请稍候…

电话号码格式化:解析、格式化和验证国际号码

解析和格式化国际电话号码。了解E.164格式、国家代码和验证方法。

电话号码格式化:解析、格式化和验证国际号码

国际电话号码标准

不同国家的电话号码在长度、格式和路由上差异巨大。E.164标准(ITU-T建议)为全球电信系统中使用的国际电话号码提供了通用格式。

电话号码格式化:解析、格式化和验证国际号码插图

E.164格式

E.164国际电话号码格式:

+[国家代码][区号][用户号码]

要求:

  • +(国际前缀)开头
  • 最多15位数字(不包括 +
  • 无空格、破折号或括号

示例:

  • 美国号码:+12125551234(国家代码1,区号212)
  • 英国号码:+442071234567(国家代码44)
  • 日本号码:+81312345678(国家代码81)

E.164被SMS网关、VoIP系统、CRM平台以及Twilio等电话API使用。

国内格式与国际格式

同一个号码在国内格式和国际格式下可能看起来截然不同:

国家 国内格式 国际格式(E.164)
美国 (800) 555-0100 +18005550100
英国 020 7946 0958 +442079460958
德国 030 12345678 +493012345678
法国 01 23 45 67 89 +33123456789
澳大利亚 (02) 1234 5678 +61212345678
日本 03-1234-5678 +81312345678

注意:国内格式通常省略国家代码,并使用本地区号表示法,带有各种分隔符。

国家代码参考

常见国际拨号代码(国家呼叫代码):

  • +1:美国、加拿大和加勒比国家
  • +7:俄罗斯和哈萨克斯坦
  • +20:埃及
  • +27:南非
  • +33:法国
  • +34:西班牙
  • +44:英国
  • +49:德国
  • +55:巴西
  • +61:澳大利亚
  • +81:日本
  • +82:韩国
  • +86:中国
  • +91:印度
  • +971:阿拉伯联合酋长国

电话号码格式化:解析、格式化和验证国际号码插图

电话号码验证

验证电话号码比看起来更复杂:

基本格式验证

// 简单的E.164格式正则表达式
const e164Regex = /^\+[1-9]\d{1,14}$/;
e164Regex.test('+12125551234'); // true

libphonenumber

Google的libphonenumber库提供了基于国家特定规则的全面验证:

// 使用libphonenumber-js
import { parsePhoneNumber } from 'libphonenumber-js';
const phone = parsePhoneNumber('+12125551234');
phone.isValid(); // true
phone.country; // 'US'
phone.formatInternational(); // '+1 212 555 1234'
phone.formatNational(); // '(212) 555-1234'

libphonenumber了解每个国家的有效号码模式,不仅验证格式,还验证特定号码是否可能存在。

电话号码格式化:解析、格式化和验证国际号码插图

电话号码类型

  • 地理号码:与位置关联的固定线路号码
  • 移动号码:手机号码
  • 免费号码:美国的800/888/877;免费拨打
  • 付费号码:收入分成号码
  • VoIP号码:基于互联网的电话号码
  • 短号码:用于SMS服务的5-6位数字号码

类型影响验证规则和预期长度。

在数据库中存储电话号码

最佳实践:

  1. 始终以E.164格式存储:规范、无歧义、可搜索
  2. 存储为VARCHAR/TEXT:不要存储为整数(前导零、+号)
  3. 单独存储原始输入:如果需要按输入显示
  4. 输入时规范化:在注册时验证并转换为E.164
-- 好:E.164存储为文本
CREATE TABLE contacts (
  id SERIAL PRIMARY KEY,
  phone_e164 VARCHAR(16),  -- +12125551234
  phone_display VARCHAR(30) -- (212) 555-1234
);

使用电话号码解析器和格式化器

我们的工具:

  1. 解析任何电话号码格式——处理括号、破折号、空格、点号
  2. 检测国家——通过呼叫代码识别国家
  3. 验证号码——根据国家特定规则检查
  4. 转换格式——以E.164、国际或国内格式显示
  5. 显示号码类型——地理、移动、免费等
  6. 批量处理——从CSV一次解析多个号码

用于在数据库导入前标准化电话号码、验证用户输入以及重新格式化联系人列表。