H1.10.2phone number variants and country codes设计研究

电话号码需处理区号与格式变体

别名: 电话格式 · 国际区号 · E.164 · phone input

概念解释

电话号码在人手里是一串带空格、横线、括号、前导 0 和 + 的写法,在系统里通常要落到可拨打的单一表示。处理区号与格式变体指输入层要同时接受本地写法(010-6552-xxxx(415) 555-…)和国际写法(+86 …00 44 …),并把国家码与国内号码分开存储,而不是用一条「11 位数字」卡住所有人。地址怎么分列、姓名有几段,不是电话的问题。展示时要不要分组,也不等于输入时只能键入无空格数字。

机制

人按自己听过或抄过的格式回忆号码,不会先把它洗成规范数字。校验若只认一种长度或禁止 + 和空格,合法号码在输入层就死了。第二层是国家码与国内前缀的冲突:中国国内写 010,国际写 +86 10;英国国内写 020,国际写 +44 20。两套前缀不能同时出现在同一规范值里,但输入必须允许人写其中任一套。没有国家选择器时,+ 是唯一稳定的国际线索;强制「先选国旗再填本地号」对只记得国际格式的人不友好,反过来只给一个无国界的数字框,又无法解释前导 0。分三个框(国家码、区号、号码)在区号已经取消的国家会变成空壳。稳妥的输入是:可含标点的一串 + 明确的国家上下文,存储时再归一。

怎么研究

让人用自己手机上「联系人里怎么存的」那串去填,而不是用实验者印好的数字。比较「纯数字长度校验」、带国家选择器、允许 + 与空格再解析。

自变量:是否允许标点和 +、国家码如何提供(选择器 / 从 + 解析 / 假定当前国)、是否剥国内前导 0。 因变量:本人号码被拒、国际与本地两种写法是否都能通过、归一后能否拨通或发短信、人是否把国家码填进号码框导致重复。

实验室给打印好的 11 位,会假装长度校验够用。要用通讯录粘贴。短信验证码能否真正到达是比格式是否好看更硬的因变量。

边界

只在一国运营且运营商保证长度唯一的内部分机表,可以用固定长度,但仍应接受粘贴进来的空格。分机号(;1234ext. 12)不是国家码,混进同一框会破坏归一。紧急号码、短码、服务号长度远小于普通号码,用手机号规则会把它们判死。语音输入会带「加号八六」之类的词,需要另一套解析,不能只靠按键过滤。

怎么落地

  • 电话输入允许空格、横线、括号和前导 +;校验在剥离标点之后做,不要在按键时禁止这些字符。
  • 国家上下文必须明确:选择器或从 + 解析,禁止默认「都是本国 11 位」。国内前导 0 在归一到国际表示时丢掉,不要让用户自己决定丢不丢。
  • 粘贴来自通讯录的整串应一次解析成功,不要要求人先删空格。
  • 验证:把通讯录里带括号的美国号码、带 +86 的中国号码、带国内前导 0 的同一号各贴一次,三次都应归一到可拨打的值。用「必须 11 位数字」去挡带空格的本国号,作为不得发布的对照。发一条验证码到归一后的号,确认不是只通过了格式。

延伸

  • 同组H1.10.1 地址格式随地区变化,不可固定字段 · H1.10.3 姓名不应假定姓与名的顺序与数量
  • 相邻S2.07 电话号码格式 · E2.07 输入掩码 · H6.03 验证码与免密登录
  • 站内检索phone number · country code · E.164

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/H1.10.2