Element Plus中,表单校验的`rules`语法格式

在Element Plus中,表单校验的rules属性是一个对象,其中每个键对应表单中的一个字段,值是一个包含校验规则的数组。以下是rules的语法格式:

基本语法

const rules = reactive<FormRules>({
  field1: [
    { rule1 },
    { rule2 }
  ],
  field2: [
    { rule1 },
    { rule2 }
  ],
  // 更多字段...
});

校验规则对象的属性

每个校验规则对象可以包含以下属性:

属性类型描述
requiredboolean是否必填。如果为true,则字段不能为空。
messagestring校验失败时显示的错误消息。
triggerstring触发校验的事件,可以是blur(失去焦点时)、change(值改变时)或submit(表单提交时)。
minnumber字符串或数组的最小长度。
maxnumber字符串或数组的最大长度。
lennumber字符串或数组的精确长度。
patternRegExp用于正则表达式校验的模式。
typestring校验类型,如stringnumberbooleandate等。
enumArray允许的值列表。
whitespaceboolean如果为true,则字段不能只包含空白字符。
validatorFunction自定义校验函数。函数签名:(rule, value, callback) => void

示例代码

1. 基本校验规则
const rules = reactive<FormRules>({
  name: [
    { required: true, message: '请输入用户名', trigger: 'blur' },
    { min: 5, max: 10, message: '用户名必须是5-10位字符', trigger: 'blur' }
  ],
  email: [
    { required: true, message: '请输入邮箱', trigger: 'blur' },
    { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' }
  ]
});
2. 自定义校验规则
const rules = reactive<FormRules>({
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度应为6到20个字符', trigger: 'blur' },
    { pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/, message: '密码必须包含大写字母、小写字母和数字', trigger: 'blur' }
  ],
  confirmPassword: [
    { required: true, message: '请确认密码', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (value !== form.password) {
        callback(new Error('两次输入的密码不一致'));
      } else {
        callback();
      }
    }, trigger: 'blur' }
  ]
});
3. 动态校验规则
const rules = reactive<FormRules>({
  title: [
    {
      validator: (rule, value, callback) => {
        const subtitle = form.subtitle;
        const maxLength = subtitle ? 16 : 32;
        const length = calculateLength(value);

        if (length > maxLength) {
          callback(new Error(`标题不能超过 ${maxLength} 个字符`));
        } else {
          callback();
        }
      },
      trigger: 'blur',
    },
  ],
});
4. 使用正则表达式校验
const rules = reactive<FormRules>({
  phone: [
    { pattern: /^[1-9]\d{9}$/, message: '请输入有效的手机号码', trigger: 'blur' }
  ],
  idCard: [
    {
      pattern: /^(?:\d{15}|\d{18}|\d{17}X)$/,
      message: '请输入有效的身份证号',
      trigger: 'blur'
    }
  ]
});
5. 使用type属性校验
const rules = reactive<FormRules>({
  number: [
    { type: 'number', message: '请输入数字', trigger: 'blur' }
  ],
  url: [
    {
      type: 'url',
      message: '请输入有效的URL地址',
      trigger: 'blur'
    }
  ]
});
6. 使用whitespace属性校验
const rules = reactive<FormRules>({
  name: [
    { required: true, whitespace: true, message: '不能为空或空格', trigger: 'blur' }
  ]
});
7. 使用enum属性校验
const rules = reactive<FormRules>({
  gender: [
    { enum: ['male', 'female'], message: '请选择性别', trigger: 'change' }
  ]
});
8. 使用len属性校验
const rules = reactive<FormRules>({
  username: [
    { len: 5, message: '用户名必须为5个字符', trigger: 'blur' }
  ]
});
9. 使用trigger属性校验
const rules = reactive<FormRules>({
  name: [
    { required: true, message: '请输入用户名', trigger: 'blur' },
    { min: 5, max: 10, message: '用户名必须是5-10位字符', trigger: 'change' }
  ]
});
10. 使用message属性校验
const rules = reactive<FormRules>({
  name: [
    { required: true, message: '用户名不能为空', trigger: 'blur' }
  ]
});
11. 使用pattern属性校验
const rules = reactive<FormRules>({
  username: [
    {
      pattern: /^[a-zA-Z0-9_]+$/,
      message: '用户名只能包含字母、数字和下划线',
      trigger: 'blur'
    }
  ]
});
12. 使用validator属性校验
const rules = reactive<FormRules>({
  customField: [
    {
      validator: (rule, value, callback) => {
        if (!value) {
          callback(new Error('字段不能为空'));
        } else {
          callback();
        }
      },
      trigger: 'blur'
    }
  ]
});

总结

Element Plus的表单校验rules属性是一个灵活的工具,可以满足各种复杂的校验需求。通过组合使用内置规则和自定义校验函数,可以轻松实现复杂的表单验证逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值