电话号码格式化校验
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/hxb20267147 电话格式化校验技能到你的 AI 助手。
技能介绍
要解决的具体问题
手动校验手机号时,很多人会用简单的 ^1\d{10}$ 正则,但这种方案只能匹配国内 11 位号码,无法处理国际号码、带空格或区号的输入,也不能输出统一的存储格式。实际业务中,存库需要 E.164 这类无空格的标准格式,界面展示却要保留国内用户熟悉的分段样式,混用会导致数据重复或查询失败。另外,非法号码的报错往往模糊,用户不知道具体哪里填错了。
技能如何工作
该技能基于 libphonenumber-js 实现,核心能力包括:
- 校验与格式化:输入号码时自动识别默认国家(CN,可配置),合法号码返回
e164(存储用)和national(展示用)两种格式,非法号码给出中文原因(如"位数不足""区号无效")。 - 推荐实现步骤:失焦或提交时调用
formatPhone函数;校验成功后写入mobileE164字段作为唯一标识,界面展示national格式;自测用例覆盖13800138000、+86 138 0013 8000和非法短号,确保边界情况正确。
适用边界与注意点
- 格式合法≠真实有效:校验通过仅代表格式符合规则,不保证号码已实名或可接通。
- 禁止外传号码:默认本地校验,不要将号码发送到不明外网服务。
- 避免能力冒充:不要用简单正则伪装成完整校验能力,需明确说明依赖
libphonenumber-js的局限性。
使用场景
- 录入客户手机号到 CRM 时,需要校验号码合法性,并把带空格的输入统一成无空格格式再入库
- 导出通讯录前要把手机号批量转换为 E.164,保证下游系统和短信服务能正确识别
- 国际用户填写号码时,要按默认国家解析区号,并给出合法或非法的中文提示
- 用户在表单里输错短号或漏位时,需要在失焦时给出具体中文原因并阻止提交
适合人员
- 后端工程师:需要在入库前统一手机号格式,避免脏数据污染唯一键
- 前端工程师:要在表单失焦时给出准确的中文校验提示,并区分展示字段与存储字段
- 数据工程师:在导出通讯录或对接短信服务前,需要把号码转成 E.164
- 测试工程师:需要一组覆盖国内号码、带空格号码与非法短号的自测用例