el-form 自定义校验规则

这里我们使用v3+ts来编写校验规则

代码结构:

<template>
 <el-form ref="ruleFormRef" :model="form" :rules="rules" label-position="top">
        <el-form-item label="地址" prop="side" :class="{'input-focused': focusMark === 'side','input-has-value': side}" class="input-container">
          <input type="text" v-model="side" @blur="formBlur" @focus="formFocus('side')"/>
        </el-form-item>
        <el-form-item label="邮箱" prop="email" :class="{'input-focused': focusMark === 'email','input-has-value': form.email}" class="input-container">
          <input type="text" v-model="form.email" @blur="formBlur" @focus="formFocus('email')"/>
        </el-form-item>

      </el-form>
</template>

//
rules  定义的校验规则
label-position  输入框文字出现的位置 默认为 right

定义数据:

<template>
 <el-form ref="ruleFormRef" :model="form" :rules="rules" label-position="top">
        <el-form-item label="地址" prop="side" :class="{'input-focused': focusMark === 'side','input-has-value': side}" class="input-container">
          <input type="text" v-model="side" @blur="formBlur" @focus="formFocus('side')"/>
        </el-form-item>
        <el-form-item label="邮箱" prop="email" :class="{'input-focused': focusMark === 'email','input-has-value': form.email}" class="input-container">
          <input type="text" v-model="form.email" @blur="formBlur" @focus="formFocus('email')"/>
        </el-form-item>

      </el-form>
</template>

//
rules  定义的校验规则
label-position  输入框文字出现的位置 默认为 right

<script lang='ts' setup>
import {ref,reactive} from 'vue'
import type { FormInstance, FormRules } from 'element-plus'

interface RuleForm {
  side: string
  email: string
}
//定义表单数据
const form=reavtive<RuleForm >({
    side:"",
    email:""
})

</script>

定义校验规则:

<template>
 <el-form ref="ruleFormRef" :model="form" :rules="rules" label-position="top">
        <el-form-item label="地址" prop="side" :class="{'input-focused': focusMark === 'side','input-has-value': side}" class="input-container">
          <input type="text" v-model="side" @blur="formBlur" @focus="formFocus('side')"/>
        </el-form-item>
        <el-form-item label="电话" prop="phone" :class="{'input-focused': focusMark === 'phone','input-has-value': form.phone}" class="input-container">
          <input type="text" v-model="form.email" @blur="formBlur" @focus="formFocus('phone')"/>
        </el-form-item>
        <el-form-item label="旧密码" prop="oldPassWord">
          <input type="text" v-model="form.oldPassWord" @blur="formBlur" @focus="formFocus('oldPassWord')"/>
        </el-form-item>
        <el-form-item label="新密码" prop="newPassWord" >
          <input type="text" v-model="form.newPassWord" @blur="formBlur" @focus="formFocus('newPassWord')"/>
        </el-form-item>
        <el-form-item label="确定密码" prop="enterPassWord" >
          <input type="text" v-model="form.enterPassWord" @blur="formBlur" @focus="formFocus('enterPassWord')"/>
        </el-form-item>
      </el-form>
</template>

//
rules  定义的校验规则
label-position  输入框文字出现的位置 默认为 right

<script lang='ts' setup>
import {ref,reactive} from 'vue'
import type { FormInstance, FormRules } from 'element-plus'

interface RuleForm {
  side: string
  phone: string
  oldPassWord:string
  newPassWord:string
  enterPassWord:string
}
const PRICEREG = /(^[1-9]{1}[0-9]*$)|(^[1-9]{1}[0-9]*\.[0-9]{1,2}$)|([0]{1}\.\d{1,2}$)/;//必须把0和0.0以及0.00排除  正则验证
const ruleFormRef= ref<FormInstance>()
//定义表单数据
const form=reavtive<RuleForm >({
    side:"",
    phone:"",
    oldPassWord:"",
    newPassWord:"",
    enterPassWord:""
})

//确定新密码校验
const enterpassword=((rule:any, value:any, callback:any)=>{
    if(value === ''){  
    callback(new Error('请输入密码'));
  }else if(value !== form.newPassWord){
    callback(new Error('两次密码不一致'));
  }else{
    callback()
  }
})
//定义校验规则
const rules=reactive<FormRules<form>>({
    side:[{
         required: true,  //是否为必填项
         message: '请输入地址', //提示内容
         trigger: 'blur' ,     // 触发提示方式
        }],
    phone:[{
           required: true,  //是否为必填项
           pattern: PHONE_REG,  //正则验证
           message: "请填写正确的手机号码",
           trigger: ["blur", "change"]   
        }],
    oldPassWord:[{
           required: true,  //是否为必填项 
           message: "请输入原密码",
           trigger: ["blur", "change"]
    }],
    newPassWord:[{
           required: true,  //是否为必填项 
           message: "请输入新密码",
           trigger: ["blur", "change"]
    }],
    enterPassWord:[{
           required: true,  //是否为必填项 
           validator:enterpassword,  // 使用定义好的验证规则
           trigger: ["blur", "change"]
    }]
})

使用校验规则时
只需要再 el-form-item 标签上 定义  prop='定义的校验规则名'
</script>

回调方法:

<template>
 <el-form ref="ruleFormRef" :model="form" :rules="rules" label-position="top">
        <el-form-item label="地址" prop="side" :class="{'input-focused': focusMark === 'side','input-has-value': side}" class="input-container">
          <input type="text" v-model="side" @blur="formBlur" @focus="formFocus('side')"/>
        </el-form-item>
        <el-form-item label="电话" prop="phone" :class="{'input-focused': focusMark === 'phone','input-has-value': form.phone}" class="input-container">
          <input type="text" v-model="form.email" @blur="formBlur" @focus="formFocus('phone')"/>
        </el-form-item>
        <el-form-item label="旧密码" prop="oldPassWord">
          <input type="text" v-model="form.oldPassWord" @blur="formBlur" @focus="formFocus('oldPassWord')"/>
        </el-form-item>
        <el-form-item label="新密码" prop="newPassWord" >
          <input type="text" v-model="form.newPassWord" @blur="formBlur" @focus="formFocus('newPassWord')"/>
        </el-form-item>
        <el-form-item label="确定密码" prop="enterPassWord" >
          <input type="text" v-model="form.enterPassWord" @blur="formBlur" @focus="formFocus('enterPassWord')"/>
        </el-form-item>
      </el-form>
<el-button @click="resetForm(rulePassWordFormRef)">重置</el-button>
<el-button type="primary" @click="enterChange(rulePassWordFormRef)">确定</el-button>
</template>

//
rules  定义的校验规则
label-position  输入框文字出现的位置 默认为 right

<script lang='ts' setup>
import {ref,reactive} from 'vue'
import type { FormInstance, FormRules } from 'element-plus'

interface RuleForm {
  side: string
  phone: string
  oldPassWord:string
  newPassWord:string
  enterPassWord:string
}
const PRICEREG = /(^[1-9]{1}[0-9]*$)|(^[1-9]{1}[0-9]*\.[0-9]{1,2}$)|([0]{1}\.\d{1,2}$)/;//必须把0和0.0以及0.00排除  正则验证
const ruleFormRef= ref<FormInstance>()
//定义表单数据
const form=reavtive<RuleForm >({
    side:"",
    phone:"",
    oldPassWord:"",
    newPassWord:"",
    enterPassWord:""
})

//确定新密码校验
const enterpassword=((rule:any, value:any, callback:any)=>{
    if(value === ''){  
    callback(new Error('请输入密码'));
  }else if(value !== form.newPassWord){
    callback(new Error('两次密码不一致'));
  }else{
    callback()
  }
})
//定义校验规则
const rules=reactive<FormRules<form>>({
    side:[{
         required: true,  //是否为必填项
         message: '请输入地址', //提示内容
         trigger: 'blur' ,     // 触发提示方式
        }],
    phone:[{
           required: true,  //是否为必填项
           pattern: PHONE_REG,  //正则验证
           message: "请填写正确的手机号码",
           trigger: ["blur", "change"]   
        }],
    oldPassWord:[{
           required: true,  //是否为必填项 
           message: "请输入原密码",
           trigger: ["blur", "change"]
    }],
    newPassWord:[{
           required: true,  //是否为必填项 
           message: "请输入新密码",
           trigger: ["blur", "change"]
    }],
    enterPassWord:[{
           required: true,  //是否为必填项 
           validator:enterpassword,  // 使用定义好的验证规则
           trigger: ["blur", "change"]
    }]
})

//使用校验规则时
//只需要再 el-form-item 标签上 定义  prop='定义的校验规则名'

//回调方法
/**
* 重置form
**/
const resetForm=(formEl: FormInstance | undefined)=>{
      if (!formEl) return
      formEl.resetFields()  //置空输入框

}
/**
* 确定
**/
const enterChange =async (formEl: FormInstance | undefined)=>{
    if (!formEl) return
     await formEl.validate((valid, fields) => {
    if (valid) {
      console.log('submit!')  //校验成功
    } else {
      console.log('error submit!', fields)  //校验失败
    }
  })
}
</script>

以上就是 使用el-form 自定义校验规则的详细教程,有问题请留言,或者私信!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,el-form自定义校验规则required可以是动态的。你可以在自定义校验规则的函数中,根据需要动态地返回校验规则的结果。例如,你可以根据表单中其他字段的值来判断某个字段是否为必填项。具体的实现方式可以参考以下代码: ```javascript // 定义一个动态的required校验规则 const dynamicRequired = (otherFieldValue) => { return (rule, value, callback) => { if (otherFieldValue === 'something') { // 如果满足某个条件,则该字段为必填项 if (!value) { callback(new Error('该字段为必填项')) } else { callback() } } else { // 如果不满足条件,则该字段不需要校验必填项 callback() } } } // 在表单中使用动态的required校验规则 <el-form ref="form" :model="form"> <el-form-item label="其他字段"> <el-select v-model="form.otherField"> <el-option label="条件1" value="something"></el-option> <el-option label="条件2" value="something else"></el-option> </el-select> </el-form-item> <el-form-item label="需要校验必填项的字段"> <el-input v-model="form.requiredField"></el-input> <el-form-item label="是否必填"> <el-switch v-model="form.required"></el-switch> </el-form-item> </el-form-item> </el-form> // 在代码中动态设置required校验规则 this.$refs.form.validateField('requiredField', (errorMessage) => { if (errorMessage) { // 校验失败,需要显示错误提示 this.$message.error(errorMessage) } else { // 校验成功,可以提交表单 this.submitForm() } }, { required: dynamicRequired(this.form.otherField) }) ``` 在上面的代码中,我们定义了一个动态的required校验规则`dynamicRequired`,它接受一个其他字段的值作为参数,返回一个校验函数。在校验函数中,我们根据其他字段的值来判断该字段是否为必填项,如果满足条件,则需要校验必填项,否则不需要校验。在表单中,我们使用了一个开关来控制该字段是否为必填项,当开关关闭时,该字段不需要进行校验。在代码中,我们通过调用`validateField`方法来对该字段进行校验,同时动态地设置了required校验规则。这样,我们就实现了一个动态的required校验规则

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值