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

如何使用Yup对下拉选择的出生日月年字段实现最低18岁年龄校验

Yup 分字段选择出生日期最低18岁校验方案

直接给dateOfBirth对象字段添加自定义test校验即可,完整代码如下:

dateOfBirth: Yup.object().shape({
  day: Yup.string().required('day is required'),
  month: Yup.string().required('month is required'),
  year: Yup.string().required('year is required')
}).test('is-over-18', '年龄最低需满18周岁', function (birthObj) {
  const { day, month, year } = birthObj;
  // 拼接出生日期,注意JS Date月份从0开始,需减1
  const birthDate = new Date(+year, +month - 1, +day);
  // 可选:校验所选日期是否合法,避免出现2月30日这类无效日期
  const isValidDate = birthDate.getFullYear() === +year
    && birthDate.getMonth() === +month - 1
    && birthDate.getDate() === +day;
  if (!isValidDate) {
    return this.createError({ message: '请选择合法的出生日期' });
  }
  // 计算18年前的当前日期作为临界值
  const eighteenYearsAgo = new Date();
  eighteenYearsAgo.setFullYear(eighteenYearsAgo.getFullYear() - 18);
  // 出生日期早于等于临界值则校验通过
  return birthDate <= eighteenYearsAgo;
})

注意事项

  • 如果你的下拉选项已经做了日月联动(比如选2月后日的选项最多只有28/29天),可以去掉日期合法性校验的逻辑
  • 错误提示文案可根据业务需求自行修改,原生的required提示也可以替换为中文文案

内容的提问来源于stack exchange,提问作者Abhijit Desai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:09:01