电话号码解析与格式化

解析国际电话号码、校验有效性,并重排为 E.164、国际或国内格式。

解析国际电话号码、校验有效性,并重排为 E.164、国际或国内格式。 解析国际电话号码、校验有效性,并重排为 E.164、国际或国内格式。

背景知识

电话号码的结构

国际电话号码由三个逻辑部分组成:国家呼叫代码(北美为 1、英国 44、中国 86、 日本 81 等)、国内有效号码(区号加用户号码)以及可选的扩展号。E.164 建议定义 了规范表示:开头的 +、国家代码、无分隔符的国内号码——例如 +14155552671。 用户自由输入号码时可能带空格、短横线、括号或只在国境内有意义的开头 0。 好的解析器会把这一切归一化为结构化字段。

为什么解析比看起来难

各国几乎在所有方面都有差异:国内号码长度、主干前缀的用法(中国从国外拨打 时要去掉开头 0,英国对其主干 0 也如此)、移动与固定前缀、特殊短号码等。 4444 在某些国家是有效国内号码,在另一些国家则无效。编号计划也在不断变化—— 巴西 2016 年给所有移动号码加了一位,每个国家的监管机构都会发布变更。这就是 为什么严肃的校验器携带完整的元数据数据库而不是硬编码正则。本页面所用的库 内置了每个国家和地区的官方 Google 元数据,因此它知道例如中国移动号码是 11 位且以 1 开头。

使用解析器

输入带或不带 + 和国家代码的号码。如果省略国家代码,请从下拉框选择默认 国家,解析器才能解析国内格式。工具会报告 E.164 形式、带空格的国际格式、 国内格式、检测到的国家、呼叫代码、国内号码、号码是否有效且可能、号码类型 (移动、固定、免费电话等),以及元数据能确定时的运营商。一个号码可能"可能" (长度与前缀形状正确)但并非"有效"(已分配且结构正确)——两种检查都会显示。

实用提示

从裸号码检测国家是启发式的:+1 555 2671 明确指向北美,但短号码可能匹配 多个国家。机器间使用务必包含国家代码,并在数据库中存储 E.164 形式。校验 用户输入时,先用"可能"检查获得即时 UX 反馈,提交时再做完整的"有效"检查。 本工具完全在浏览器中基于内置的 libphonenumber-js(MIT)数据运行,你输入的 任何内容都不会被传输。

使用 MIT 协议的 libphonenumber-js 库(已内置于 public/assets)。解析在浏览器本地完成。

常见问题

为什么会出现「可能但不有效」?
可能表示号码符合该国家的一般长度与前缀形状;有效表示在官方元数据下是真正已分配的号码。许多测试号码或未分配号段都是可能但不有效。
什么是 E.164,为什么要存储它?
E.164 是 ITU 的电话号码标准:+ 国家代码 国内号码,最多 15 位。存储这种单一规范形式让去重和国际拨号变得简单,因为它在所有国家都无歧义。
没有国家代码能校验号码吗?
不能可靠校验。没有国家代码时解析器只能猜测,短号码可能在许多国家都有效。只要输入不是明确国际格式,就应提供默认国家(或要求国家代码)。
号码类型是如何确定的?
内置元数据按前缀对号段分类:移动、固定、免费电话、付费电话、VoIP、共享成本等。仅当元数据分配了类型时才显示,否则显示短横线。
我的输入会被发送到任何地方吗?
不会。解析、校验和格式化都在浏览器内使用内置的 libphonenumber-js(MIT)完成。页面加载后可以完全离线工作。
为什么同一个号码在不同国家格式化结果不同?
国际格式按各国自己的惯例分组(例如法国号码两位一组、美国号码 3-3-4)。E.164 始终保持一致,变化的只是显示形式。