You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Zod实现合法手机号验证?

Zod手机号验证的正确实现方式

你的现有代码仅限制了字段的长度范围,但未校验输入的字符类型,会允许字母等无效内容,不符合需求。结合你提出的「允许带+前缀、禁止字母、长度10-14位、不同错误提示」要求,可以通过Zod的regex方法配合长度校验来实现:

contactNumber: z
  .string()
  // 校验字符格式:仅允许开头可选的+,后续全为数字
  .regex(/^\+?\d+$/, { message: 'Must be a valid number' })
  // 校验总长度范围(包含+符号)
  .min(10, { message: 'Must be a valid mobile number' })
  .max(14, { message: 'Must be a valid mobile number' }),

代码说明:

  • regex(/^\+?\d+$/):确保输入只能是可选的+前缀加纯数字,若输入包含字母、特殊符号(除开头的+外),会触发Must be a valid number提示。
  • min(10)和max(14):控制输入的总长度(包含+)在10到14位之间,长度不符合时触发Must be a valid mobile number提示。

如果你想把长度校验整合到正则中(减少链式调用),可以使用长度断言的正则,并通过自定义消息函数返回对应提示:

contactNumber: z
  .string()
  .regex(/^(?=.{10,14}$)\+?\d+$/, { 
    message: (ctx) => {
      if (!/^\+?\d+$/.test(ctx.value)) {
        return 'Must be a valid number';
      }
      return 'Must be a valid mobile number';
    }
  }),

内容的提问来源于stack exchange,提问作者Jennifer De Goede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:45:33