el-form自定义校验规则

Vue 的 el-form 组件可以使用自定义校验规则进行表单验证。自定义校验规则可以通过传递一个函数来实现,该函数接受要校验的字段的值作为参数,并返回一个布尔值或一个 Promise 对象。

下面是一个示例,演示如何在 el-form 中使用自定义校验规则:

javascript 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         <template>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         <el-form-item label="用户名" prop="username" :rules="usernameRules">
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         <el-input v-model="form.username">
         
         </el-input>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         </el-form-item>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
         
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         <el-form-item>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         <el-button type="primary" @click="submitForm">提交
         
         </el-button>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         <el-button @click="resetForm">重置
         
         </el-button>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         </el-form-item>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         </el-form>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         </template>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
         
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         <script>
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         export 
         
         default {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         data(
         
         ) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         return {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         form: {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 
         
         username: 
         
         ''
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         rules: {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 
         
         username: [
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   { 
         
         required: 
         
         true, 
         
         message: 
         
         '请输入用户名', 
         
         trigger: 
         
         'blur' }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 ]
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             };
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         methods: {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         submitForm(
         
         ) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         this.
         
         $refs.
         
         form.
         
         validate(
         
         valid => {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 
         
         if (valid) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   
         
         // 表单验证通过,提交表单
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   
         
         console.
         
         log(
         
         '提交表单');
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 } 
         
         else {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   
         
         // 表单验证失败,打印错误信息
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   
         
         console.
         
         log(
         
         '表单验证失败');
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                   
         
         return 
         
         false;
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               });
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         resetForm(
         
         ) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         this.
         
         $refs.
         
         form.
         
         resetFields();
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         computed: {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         usernameRules(
         
         ) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         return [
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 { 
         
         required: 
         
         true, 
         
         message: 
         
         '请输入用户名', 
         
         trigger: 
         
         'blur' },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 { 
         
         validator: 
         
         this.
         
         validateUsername, 
         
         trigger: 
         
         'blur' }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               ];
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           },
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           
         
         methods: {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             
         
         validateUsername(
         
         rule, value, callback) {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         // 自定义校验规则
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               
         
         if (value === 
         
         'admin') {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 
         
         callback(
         
         new 
         
         Error(
         
         '用户名已存在'));
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               } 
         
         else {
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 
         
         callback();
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
               }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
           }
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         };
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         </script>
        
        
        
       
       
       

   

   
   
   

在上述例子中,我们定义了一个表单项 "用户名",并给它设置了两个校验规则,一个是必填规则,一个是自定义规则。自定义规则通过 `validator` 属性指向一个函数,该函数会在校验时调用。函数接受三个参数:`rule` 表示当前字段的验证规则,`value` 表示当前字段的值,`callback` 用来返回校验结果。当校验不通过时,通过调用 `callback` 函数并传递错误消息来报告校验失败。

这只是一个简单的例子,你可以根据你的具体需求来定义更复杂的自定义校验规则。

相关推荐
six+seven1 分钟前
Node.js内置模块fs
前端·node.js
少莫千华2 分钟前
【HTML】CSS绘制奥运五环
前端·css·html
沛沛老爹2 分钟前
Web开发者转型AI安全核心:Agent Skills沙盒环境与威胁缓解实战
java·前端·人工智能·安全·rag·web转型升级
仰泳之鹅15 分钟前
【杂谈】C语言中的链接属性、声明周期以及static关键字
java·c语言·前端
2501_9403152619 分钟前
【无标题】(leetcode933)最近的请求次数
java·前端·javascript
每天吃饭的羊30 分钟前
LeetCode 第一题
前端
入门级前端开发32 分钟前
vue集成xlsl实现前端表格导入导出
前端·javascript·vue.js
小二·36 分钟前
Python Web 开发进阶实战:联邦学习平台 —— 在 Flask + Vue 中构建隐私保护的分布式 AI 训练系统
前端·python·flask
一人の梅雨42 分钟前
中国制造网商品详情接口进阶实战:跨境场景下的差异化适配与问题攻坚
java·前端·javascript
无知的小菜鸡1 小时前
React:使用高阶组件实现vue中的路由守卫功能
前端·vue.js·react.js