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

React-hook-form:如何为多个验证函数添加自定义错误提示?

在React Hook Form中为多验证函数添加自定义错误提示

问题说明

在React Hook Form里,我们可以直接给required规则指定自定义错误提示:

rules={{
  required: "This field is required",
}}

但当validate是包含多个验证函数的对象时,比如下面这样:

validate: {
  noEmoji: validateNoEmoji,
  noNumbersNoPunctuation: validateOnlyLettersSpacesApostrophes,
},

该如何为每个验证函数分别设置自定义错误消息?比如要给noEmoji添加提示"You can't use emoji",给noNumbersNoPunctuation添加提示"You cannot use numbers or punctuation."。

以下是当前的Controller组件和验证函数代码:

Controller组件代码

<Controller
  control={control}
  name={name}
  rules={{
    required: "This field is required",
    validate: {
      noEmoji: validateNoEmoji,
      noNumbersNoPunctuation: validateOnlyLettersSpacesApostrophes,
    },
  }}
  render={({
    field: { onChange, onBlur, value },
  }) => (
    <IonInput
      label={label}
      name={name}
      value={value}
    />
  )}
/>

原验证函数

const validateNoEmoji = (value: string) => !/[힘-�]/.test(value);

const validateOnlyLettersSpacesApostrophes = (value: string): boolean => {
  // 只允许字母、空格和撇号
  if (!/[^a-zA-Z ']/.test(value)) {
    return true;
  }
  return false;
};

解决方案

React Hook Form允许验证函数返回布尔值或字符串(错误消息)。当验证不通过时,直接返回自定义错误消息即可,无需返回false。

修改后的验证函数

const validateNoEmoji = (value: string) => 
  !/[힘-�]/.test(value) || "You can't use emoji";

const validateOnlyLettersSpacesApostrophes = (value: string) => {
  // 只允许字母、空格和撇号
  if (!/[^a-zA-Z ']/.test(value)) {
    return true;
  }
  return "You cannot use numbers or punctuation.";
};

原理说明

当验证函数返回true时,React Hook Form判定验证通过;当返回字符串时,判定验证不通过,并将该字符串作为错误提示信息展示。

修改后,你的Controller组件无需改动,rules中的validate对象可以直接使用修改后的验证函数,框架会自动处理错误消息的展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:15