当前位置: 首页 > news >正文

antd的Form表单校验的方式有几种

Ant Design 的 Form 组件提供了多种灵活的表单校验方式,以下是常见的几种方法及示例:


1. 内置校验规则

通过 rules 配置预定义的校验规则(如必填、长度、格式等)。

<Form.Item
  name="email"
  label="邮箱"
  rules={[
    { required: true, message: '邮箱不能为空' },
    { type: 'email', message: '邮箱格式不正确' },
    { min: 6, message: '至少6个字符' },
    { max: 30, message: '最多30个字符' },
    { pattern: /^[a-z0-9]+$/, message: '仅允许小写字母和数字' }
  ]}
>
  <Input />
</Form.Item>

2. 自定义校验函数

使用 validator 编写自定义校验逻辑。

<Form.Item
  name="password"
  label="密码"
  rules={[
    {
      validator: (_, value) => {
        if (value && value.length >= 8) {
          return Promise.resolve();
        }
        return Promise.reject(new Error('密码至少8位'));
      },
    },
  ]}
>
  <Input.Password />
</Form.Item>

3. 异步校验

validator 中处理异步操作(如接口验证)。

<Form.Item
  name="username"
  label="用户名"
  rules={[
    {
      validator: async (_, value) => {
        const isExist = await checkUsernameExists(value);
        if (isExist) {
          throw new Error('用户名已存在');
        }
      },
    },
  ]}
>
  <Input />
</Form.Item>

4. 跨字段校验

通过 dependenciesgetFieldValue 实现字段联动校验。

// 方法一:使用 dependencies
<Form.Item
  name="confirmPassword"
  label="确认密码"
  dependencies={['password']}
  rules={[
    { required: true, message: '请确认密码' },
    ({ getFieldValue }) => ({
      validator(_, value) {
        if (value === getFieldValue('password')) {
          return Promise.resolve();
        }
        return Promise.reject(new Error('两次密码不一致'));
      },
    }),
  ]}
>
  <Input.Password />
</Form.Item>

// 方法二:直接获取字段值
const password = Form.useFormInstance().getFieldValue('password');

5. 手动触发校验

通过 validateFields 手动触发表单校验(如提交时)。

const [form] = Form.useForm();

const handleSubmit = () => {
  form.validateFields()
    .then(values => console.log('提交成功', values))
    .catch(err => console.log('校验失败', err));
};

// 校验特定字段
form.validateFields(['email', 'password']);

6. 动态校验规则

根据条件动态调整校验规则。

<Form.Item
  name="age"
  label="年龄"
  rules={[
    { required: isAdult, message: '成年人需填写年龄' },
    { type: 'number', min: 0, max: 150 },
  ]}
>
  <InputNumber />
</Form.Item>

7. 控制校验触发时机

通过 validateTrigger 修改校验触发的时机(默认为 onChangeonBlur)。

<Form.Item
  name="code"
  label="验证码"
  validateTrigger="onBlur"
  rules={[{ required: true, message: '请输入验证码' }]}
>
  <Input />
</Form.Item>

8. 编程式控制校验状态

使用 setFieldsresetFields 手动设置/重置校验状态。

// 设置错误状态
form.setFields([{ name: 'email', errors: ['手动错误提示'] }]);

// 重置校验状态
form.resetFields(['email']);

这些方法覆盖了从简单到复杂的表单校验需求,可根据实际场景灵活组合使用。

http://www.dtcms.com/a/66457.html

相关文章:

  • 网络空间安全(29)漏洞扫描
  • undefined和null的区别 (新手小白级教程)
  • 第5关:猴子爬山
  • 航空动力系统适航标准要点手册
  • OpenRewrite配方之import语句的顺序——org.openrewrite.java.OrderImports
  • transformer bert 多头自注意力
  • element-plus中Autocomplete自动补全输入框组件的使用
  • 【Spring】详细剖析Spring程序
  • 多线程实现批量保存数据
  • PE,ELF,COFF
  • 基于物联网设计的疫苗冷链物流监测系统
  • 【前端知识】前端构建工具webpack的平替vite
  • 【软件测试】--面试
  • 如何用终端运行一个SpringBoot项目
  • SD ComfyUI工作流 一键Q版盲盒手办形象_多关键词切换
  • 星越L_副驾驶屏使用讲解
  • 每日一题之储存晶体
  • 基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
  • Linux驱动开发实战(四):设备树点RGB灯
  • Cursor 终极使用指南:从零开始走向AI编程
  • 【算法题解答·六】栈队列堆
  • 剑指 Offer II 073. 狒狒吃香蕉
  • 2025-03-13 禅修-错误的做法
  • 大白话如何在 Vue 项目中进行路由懒加载?
  • DexGraspVLA:面向通用灵巧抓取的视觉-语言-动作框架
  • 便利店商品推荐数字大屏:基于python和streamlit
  • python元组(被捆绑的列表)
  • 【C#学习笔记04】C语言格式化输出
  • 【Linux】线程
  • uniapp实现 uview1 u-button的水波纹效果