element Form表单自定义校验(针对局部输入控件局部校验)

本文介绍在Vue项目中,如何为动态创建的表单输入控件添加自定义校验规则。通过在<el-form-item>上绑定rules实现,并提供了一个具体的代码示例,展示了如何使用正则表达式进行输入验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近帮朋友看一个vue项目,需要在整个表单的一个输入控件上添加校验,因为表单是动态创建的,就没有考虑整个表单绑定rules,而是在<el-form-item>上绑定了rules,具体代码如下:

template/html部分:

<el-form-item 
    label="自定义校验"
    prop="text"
    :rules="[
        { 
            required: true, 
            message: '请输入~', 
            trigger: 'blur' 
        }, { 
            validator: (rule, value, callback)=>{validateSku(rule, value, callback)}, 
            trigger: ['blur', 'change'] 
        }
    ]">
    <el-input 
        v-model="formInline.text" 
        placeholder="请输入">
    </el-input>
</el-form-item>

javaScript部分:

<script>
export default {
    data() {
        return {
            formInline: {
                text: '',
            }
        }
    },
    methods: {
        onSubmit() {
            console.log('submit!');
        },
        /**
         * @method 自定义校验方法
         * callback 必须调用
         */
        validateSku(rule, value, callback){
            var text = /,/g;
            if (text.test(value)) {
                callback(new Error("输入不可以包含“,”"))
            } else {
                callback();
            }
        }
    }
}
</script>

运行结果:

1.失去焦点与点击提交时:

2.输入 “ , ” 时:

ps:

表单整体添加校验可参考Element-ui Form组件的 “ 自定义校验规则 ” 案例!

 

以上分享仅供参考,欢迎留言交流~

<think>好的,我需要解释u--form表单字段校验的原理。首先,用户可能想知道u--form是什么,但问题更关注校验原理。所以,我应该先明确u--form通常指类似Element UI或uni-app的组件库中的表单组件。 接下来,要分步骤讲解校验原理。首先,表单结构,可能需要提到v-model或类似的双向绑定机制。然后是校验规则的定义,比如required、pattern、validator等,用户可能对这些配置项比较熟悉,需要说明它们如何被使用。 然后是触发校验的时机,比如提交时、字段变化时或者失焦时。这部分要解释不同事件如何触发校验函数。 接下来是校验过程,可能需要详细说明如何遍历规则,应用正则表达式、自定义函数等。这里要强调同步和异步校验的区别,比如validator函数返回Promise的情况。 错误处理部分需要说明如何收集错误信息并显示,可能涉及UI反馈,比如红色边框和提示文字。 最后,整体校验流程,比如表单提交前的全部字段校验,确保所有规则通过后才执行提交操作。 需要注意使用中文,结构清晰,避免技术术语过于晦涩。同时,按照系统级指令,数学公式要用$...$,但这个问题可能不涉及数学公式,所以可能不需要用到。但如果有例子涉及,比如正则表达式中的模式,可能需要用$包裹,比如$pattern$。 需要检查是否遵循了LaTeX语法,但问题中可能不涉及。不过如果有正则表达式示例,可能需要正确格式化。例如,手机号校验规则中的正则表达式可以写成$/^1[3-9]\d{9}$/,用$...$包裹。 总结回答结构:表单结构、校验规则定义、触发时机、校验过程、错误处理、整体校验流程。每个部分简明扼要,逐步解释,确保用户理解各环节如何协同工作。</think>u--form表单字段校验的原理可以拆解为以下几个关键环节,我们以常见的组件库实现逻辑为例逐步分析: 1. **表单结构绑定** - 通过`v-model`或类似机制将表单控件与数据模型绑定,例如: ```html <u-form-item label="用户名"> <u-input v-model="form.username"></u-input> </u-form-item> ``` - 每个表单字段关联独立的数据属性和校验规则 2. **校验规则定义** - 采用JSON格式定义校验规则集,例如: ```javascript rules: { username: [ { required: true, message: '必填项' }, { pattern: /^[a-zA-Z0-9_]{4,16}$/, message: '4-16位字符' } ] } ``` - 支持多种校验类型: * `required`: 非空校验 * `pattern`: 正则匹配(如`$/^1[3-9]\d{9}$/`校验手机号) * `validator`: 自定义校验函数 * `type`: 数据类型校验(如email格式) 3. **校验触发机制** - **主动触发**:表单提交时的`validate`方法调用 - **被动触发**: * 字段内容变化(`@change`/`@input`事件) * 字段失焦(`@blur`事件) * 关联字段变化时的连锁校验 4. **校验执行过程** ```mermaid graph TD A[开始校验] --> B{是否有async校验?} B -->|是| C[执行异步校验队列] B -->|否| D[执行同步校验] C --> E[收集所有Promise] D --> F[立即返回结果] E --> G[等待所有Promise解析] G --> H[汇总结果] ``` 5. **校验结果处理** - 错误状态标记(如红色边框) - 错误信息展示(通过`<u-form-item>`的message插槽) - 校验状态存储(`valid/invalid`状态记录) 6. **复合校验策略** - 字段级联校验(如密码二次确认) - 跨字段依赖校验(如结束时间需晚于开始时间) - 动态规则切换(根据业务场景切换校验规则) 7. **异步校验扩展** - 支持服务器端验证(如用户名查重) - 实现方式: ```javascript validator: (rule, value) => { return new Promise((resolve, reject) => { api.checkUsername(value).then(valid => { valid ? resolve() : reject('用户名已存在') }) }) } ``` 典型校验流程示例: 1. 用户点击提交按钮 2. 表单实例遍历所有字段规则 3. 按规则顺序执行校验- 遇到首个失败规则立即中断 - 收集所有校验错误 4. 返回整体校验结果: ```javascript { valid: false, errors: [ { field: 'username', message: '格式不正确' }, { field: 'email', message: '邮箱格式错误' } ] } ``` 关键设计要点: - **防抖处理**:连续输入时延迟校验执行 - **校验缓存**:对未修改字段跳过重复校验 - **错误聚焦**:自动滚动到首个错误字段 - **多语言支持**:动态切换校验提示语 这种设计模式在主流UI库(如Element UI、Ant Design)中均有实现,核心思想是通过声明式规则配置+响应式状态管理,实现高效的表单验证机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值