S2.05.5Unicode-safe name input设计

字符集限制会拒绝合法姓名

别名: 国际姓名字符 · 姓名输入校验 · Unicode names

概念解释

Unicode 安全的姓名输入(Unicode-safe name input)允许用户以其姓名实际使用的文字、附加符号和分隔方式输入,并在存储、搜索、显示与导出链路中完整保留。只接受 ASCII 字母,或只允许“字母加一个连字符”的正则,会拒绝包含变音符号、组合附加符号、撇号、空格、连接号、非拉丁文字或多种文字的真实姓名。

机制

Unicode 中一个可见字素可能由多个 code point 组成,同一视觉文本也可能有不同的规范等价序列;按字节或 UTF-16 code unit 限长会截断代理对或组合序列。姓名还可能使用 Unicode Letter 之外的 Mark、连接标点和语言相关空白。W3C 姓名国际化资料展示了单名、多词成分、多 surname、父名及无空格姓名,说明姓名不是能由一条全球正则准确枚举的字符模式。前端放宽而数据库、消息队列、PDF 字体或第三方 API 仍窄化时,失败只会推迟发生。

边界

接受 Unicode 不等于接受任意控制字符,也不意味着不同字符串应自动视为同一姓名。规范化、大小写折叠、变音符号移除和转写可能改善搜索,却可能改变原文或制造碰撞;展示值应保留用户输入,检索键应另行生成。反欺诈与同形异义字符检测可以标记风险,但不能仅因混合文字就判姓名非法。特定证件或支付通道若只支持有限字符,应把兼容转写作为额外字段并解释限制,而不是覆盖原名。

怎么落地

  • 端到端采用 Unicode,按扩展字素簇设计界面长度反馈,并让数据库上限留出规范化与编码余量;禁止按字节盲目截断。
  • 允许各类文字中的字母与组合标记,以及姓名常用空格、撇号和连接符;按场景处理明确不允许的控制或不可见格式字符。注入风险用参数化查询、上下文输出转义和安全导出处理,不靠姓名字符黑名单。
  • 分开保存原始显示值、可选规范化搜索键与权威系统要求的转写值;记录转换来源,任何自动转写都允许用户校正。
  • 用预组与分解变音符号、非 BMP 字符、连接符变体、弯直撇号、无空格文字、混合文字和最大长度样本贯穿注册、检索、导出、邮件、PDF 与第三方同步测试。

延伸

  • 同组S2.05.1 姓与名的顺序与数量不固定 · S2.05.2 拆分姓名字段会排除部分用户 · S2.05.3 中间名、父名与后缀的处理 · S2.05.4 称谓与敬语的地区差异
  • 相邻S1.03.1 字体缺字会触发回退并改变版面 · S2.09.1 正则校验通常隐含单一地区假设
  • 站内检索Unicode name input · grapheme cluster · name validation

同组卡片

快捷操作

分享

分享当前页面

ios_share

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