当前位置: 首页 > 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']);

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

相关文章:

  • 网络空间安全(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编程
  • 专业微网站营销/百度一下电脑版首页
  • 工业设计产品设计公司排名/怎么进行网站关键词优化
  • 上海平台网站制作公司哪家好/网站模板下载免费
  • 网站开发公司制作平台/b站推广有用吗
  • fusion做电影网站卡死/全国疫情高中低风险区一览表
  • intitle:网站建设/中国科技新闻网