vue3 表单校验规则封装

1、定义一个表单验证规则对象

const validateRules = {
  // 非空验证
  required: {
    message: '此项为必填项',
    validate: (value) => !!value,
  },
  // 最大长度验证
  max: (max) => ({
    message: `输入内容长度不能超过${max}个字符`,
    validate: (value) => (!value || value.length <= max),
  }),
  // 最小长度验证
  min: (min) => ({
    message: `输入内容长度不能少于${min}个字符`,
    validate: (value) => (!value || value.length >= min),
  }),
  // 数值范围验证
  range: (min, max) => ({
    message: `输入值必须在${min}和${max}之间`,
    validate: (value) => (!value || (Number(value) >= min && Number(value) <= max)),
  }),
  // 正则表达式验证
  pattern: (pattern) => ({
    message: '输入格式不正确',
    validate: (value) => (!value || pattern.test(value)),
  }),
  // 验证两次输入是否一致
  equalTo: (target) => ({
    message: '两次输入不一致',
    validate: (value) => (value === target.value),
  }),
};

2、使用示例

const useValidate = () => {
  // 应用验证规则
  const validate = (rules, data) => {
    const errors = {};
    Object.keys(rules).forEach((key) => {
      const rule = rules[key];
      const validator = Array.isArray(rule) ? rule : [rule];
      validator.forEach((r) => {
        if (typeof r === 'function') {
          const result = r(data[key]);
          if (!result.validate) {
            errors[key] = result.message;
          }
        } else if (typeof r === 'object' && r.validate && !r.validate(data[key])) {
          errors[key] = r.message;
        }
      });
    });
    return errors;
  };
 
  return {
    validate,
    validateRules,
  };
};
 

3、使用

// 使用
const { validate, validateRules } = useValidate();
 
// 定义表单规则
const formRules = {
  username: [validateRules.required, validateRules.max(10)],
  age: [validateRules.required, validateRules.range(18, 60)],
};
 
// 表单数据
const formData = {
  username: 'Alice',
  age: '25',
};
 
// 执行验证
const errors = validate(formRules, formData);
console.log(errors);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值