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

如何使用Yup验证UUID或指定字符串(如“System”)?

问题原因及解决方案

你的验证逻辑失败的核心原因是:Yup.mixed().oneOf()的参数是具体的有效值(如字符串、数字),而非Schema对象。你把string().min(36).max(36)这个Schema放进oneOf数组里,Yup会把它当作普通对象去匹配输入值,自然无法通过验证。

下面提供两种可行的解决方式:

方案一:自定义test验证函数

直接通过test方法编写逻辑,同时兼容"System"和长度36的字符串:

const validationSchema = Yup.mixed().test(
  'system-or-uuid',
  '输入必须是"System"或长度为36的字符串',
  (value) => {
    // 先判断类型,再检查两种合法情况
    if (typeof value !== 'string') return false;
    return value === 'System' || value.length === 36;
  }
);

方案二:使用when分支验证

利用Yup的when方法,针对不同输入值应用不同验证规则:

const validationSchema = Yup.string().when('value', {
  // 当输入不是"System"时,验证长度为36
  is: (val) => val !== 'System',
  then: Yup.string().min(36).max(36),
  // 否则验证输入必须是"System"
  otherwise: Yup.string().oneOf(['System'])
});

如果需要更严谨的UUID格式验证(而非仅检查长度),可以把长度判断替换为UUID正则匹配,比如:

// 替换方案一中的判断条件
return value === 'System' || /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:10