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

表单验证多IF判断失效:如何同时校验空值与字符长度

表单验证双校验修复方案

你的问题核心是两个校验逻辑为独立赋值操作,第二个校验会直接覆盖第一个的结果,导致只有最后一个校验生效。修改后的代码如下:

const validate = (fieldValues = values) => {
    const temp = { ...errors };
    if ('name' in fieldValues) {
        // 优先检查空值
        if (!fieldValues.name) {
            temp.name = 'Location Name is required.';
        } 
        // 非空时再检查长度
        else if (fieldValues.name.length > 15) {
            temp.name = 'Location Name limited to 15 Characters.';
        } 
        // 校验通过则清空错误
        else {
            temp.name = '';
        }
    }
    setErrors({ ...temp });
    if (fieldValues === values) {
        return Object.values(temp).every(x => x === '');
    }
};

逻辑说明:

  • 先判断输入是否为空,为空时直接设置必填错误,此时不会进入后续长度校验;
  • 若输入非空,再检查字符长度是否超过15位,超出则设置长度错误;
  • 两项校验都通过时,清空对应错误信息;
  • 这种顺序判断的方式避免了错误信息被覆盖,保证两个校验规则都能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:18