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

如何使用Yup校验输入内容为邮箱或用户名?

Yup 单字段二选一(邮箱/用户名)校验实现方案

直接使用 Yup 提供的.test()自定义校验方法即可实现「满足邮箱规则或用户名规则任意一种即可通过」的逻辑,完整代码如下:

// 用户名校验正则
const usernameReg = /^(?=[a-zA-Z0-9._]{5,25}$)[^_.].*[^_.]$/;

const schema = yup.object().shape({
  // 字段名可根据实际需求修改,这里沿用示例中的email字段名
  email: yup.string()
    // 如果该字段是必填项,可开启下面这行
    // .required('账号不能为空')
    .test('account-validate', '请输入正确的邮箱地址或用户名', function(value) {
      // 空值直接返回(非必填场景适用,必填的话上方加.required()会提前拦截)
      if (!value) return true;
      // 先判断是否符合邮箱格式
      const isEmail = yup.string().email().isValidSync(value);
      if (isEmail) return true;
      // 不符合邮箱的话,判断是否符合用户名规则
      return usernameReg.test(value);
    })
});

逻辑说明

  • 校验会优先判断输入内容是否符合邮箱格式,符合则直接通过
  • 邮箱校验不通过时,会自动走用户名正则校验,符合规则也可通过
  • 如果需要调整两种校验的优先级,只需要调换邮箱校验和用户名校验的判断顺序即可
  • 两者都不符合的话,会抛出第二个参数里的错误提示,可根据需求修改提示文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:08