S2.07.4Phone number canonicalization and presentation设计研究

号码的显示格式与存储格式应分离

别名: 电话号码规范化 · E.164 存储 · 本地化号码显示 · canonical phone number

概念解释

电话号码规范化与呈现分离(phone number canonicalization and presentation)是把可比较、可路由的号码身份与面向人的显示字符串分开管理。对于能够完整国际化的公共号码,工程中常用 plus-prefixed E.164 文本表示:+ 是 E.123、RFC 3966 与软件表示采用的国际前缀符号,后接 E.164 的国家呼叫代码和全国有效号码数字结构,不含视觉分隔符。界面则可按该号码所属编号计划输出国内或国际格式。规范化不是把用户输入中的非数字全部删除:地区上下文、前导零、分机和仅本地可拨性质都可能改变含义。

机制

同一号码可以写成国内格式、带 + 的国际格式、从特定国家拨出的接入前缀格式或 tel: URI;空格与括号服务于阅读,拨号前缀服务于出发地路由,两者都不适合作为唯一身份。若数据库保存展示字符串,地区切换、号码计划更新和去重都会依赖脆弱的文本比较;若只保存一串“清洗后数字”,又会丢失解析所需结构。libphonenumber 建议保存结构化 PhoneNumber,并能输出 E164、INTERNATIONAL、NATIONAL 和 RFC3966 等表示。规范记录驱动比较与通信,呈现格式则由用途、号码归属计划和拨号出发地派生。

怎么研究

以多种真实写法指向同一号码、相似后缀指向不同号码的配对语料测试解析、规范化、匹配和去重。为每条记录保留输入地区、号码类别、分机和元数据版本,执行 parse–format–parse 往返,检查身份是否稳定、附加语义是否丢失。呈现测试分别覆盖通讯录浏览、口述核对、复制粘贴、点击拨号和跨国拨号,观察分组辨认、错误率以及拨号字符串是否适合实际出发地。元数据升级后对规范值变化做差异审计,而不是静默重写全部历史记录。

边界

E.164 适合完整的国际公共号码,但不能完整表达短码、企业内线、某些私网或仅本地可拨号码;分机也应作为独立成分保存。显示本地化按号码的编号计划,而不是按界面语言任意重分组;真正的拨号字符串还取决于呼叫出发地、运营商和设备。电话号码也不是永久人员标识,号码会携转、停机和重新分配。原始输入可能因审计、用户确认或无法无损解析而有价值,但它应作为来源字段保留,不能覆盖规范记录。

怎么落地

  • 解析成功后保存结构化国家呼叫代码、全国有效号码和独立分机;对可国际化公共号码另生成 + 加数字的 E.164 规范文本,用于索引、去重候选和系统间交换。
  • 将原始输入、解析地区、规范记录和元数据版本分开保存;对无法确定为完整国际号码的短码、内线或本地号码标注作用域,不伪造国家代码。
  • 在界面中由号码库按号码归属计划生成 NATIONAL 或 INTERNATIONAL 格式;复制、导出和点击拨号分别选择 E.164 或 RFC3966 等适合渠道的表示,不从展示文本反向拼接。
  • 建立规范化往返、幂等和元数据升级测试;对重复候选不要只比字符串,合并账户或联系人前让用户确认,并用目标设备和出发地实测拨号行为。

延伸

  • 同组S2.07.1 国际区号与本地格式的关系 · S2.07.2 号码长度与分组随国家不同 · S2.07.3 严格校验会拒绝合法号码
  • 相邻S2.01 日期与时间格式 · S2.09 输入校验的地区差异
  • 站内检索E.164 canonicalization · PhoneNumberFormat · RFC 3966 tel URI

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/S2.07.4