ElementUI表单验证指南

ElementUI 是一套基于 Vue.js 的组件库,提供了丰富的表单组件和验证功能。其表单验证通过 el-form 组件结合 rules 规则实现,支持同步和异步验证。

基本表单验证实现

在 ElementUI 中,表单验证需要配置 el-formrules 属性,并为每个 el-form-item 指定 prop 属性以关联验证规则。

<template><el-form :model="form" :rules="rules" ref="formRef"><el-form-item label="用户名" prop="username"><el-input v-model="form.username"></el-input></el-form-item><el-form-item label="密码" prop="password"><el-input v-model="form.password" type="password"></el-input></el-form-item><el-form-item label="手机号" prop="mobile"><el-input v-model="form.mobile" ></el-input></el-form-item><el-form-item label="身份证" prop="identityCard"><el-input v-model="form.identityCard" ></el-input></el-form-item><el-form-item label="车牌号" prop="carId"><el-input v-model="form.carId" ></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm">提交</el-button></el-form-item></el-form>
</template><script>
export default {data() {return {form: {username: '',password: ''},rules: {username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' },{ pattern: /^[\u4E00-\u9FA5]+$/,  message: '用户名只能为中文'}],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{ pattern: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/, message: '密码必须包含字母和数字,且至少8位', trigger: 'blur' },{ pattern: /^(\w){6,20}$/, message: '只能输入6-20个字母、数字、下划线'},{pattern: /[a-z]\w{3,7}/,message: '必须是4-8位的数字英文下画线,以字母开头'},],mobile:[{ required: true, message: '请输入手机号码', trigger: 'blur' },{validator:function(rule,value,callback){if(/^1[34578]\d{9}$/.test(value) == false){callback(new Error("请输入正确的手机号"));}else{callback();}}, trigger: 'blur'}],//   pattern: /^1[34578]\d{9}$/, message: '目前只支持中国大陆的手机号码' }identityCard:[{ required: true, message: '请输入身份证ID', trigger: 'blur'},{ pattern:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: '你的身份证格式不正确' }],carId:[{required: true, message: '请输入车牌号', trigger: 'blur'}, {pattern:/(^[\u4E00-\u9FA5]{1}[A-Z0-9]{6}$)|(^[A-Z]{2}[A-Z0-9]{2}[A-Z0-9\u4E00-\u9FA5]{1}[A-Z0-9]{4}$)|(^[\u4E00-\u9FA5]{1}[A-Z0-9]{5}[挂学警军港澳]{1}$)|(^[A-Z]{2}[0-9]{5}$)|(^(08|38){1}[A-Z0-9]{4}[A-Z0-9挂学警军港澳]{1}$)/, message: '常规格式:晋B12345'},],}}},methods: {submitForm() {this.$refs.formRef.validate(valid => {if (valid) {alert('表单验证通过')} else {return false}})}}
}
</script>

自定义验证规则

可以通过自定义验证函数实现更复杂的验证逻辑。验证函数需要返回 callbackPromise

data() {const validateAge = (rule, value, callback) => {if (!value) {return callback(new Error('年龄不能为空'))}setTimeout(() => {if (!Number.isInteger(+value)) {callback(new Error('请输入数字值'))} else {if (value < 18) {callback(new Error('必须年满18岁'))} else {callback()}}}, 1000)}return {rules: {age: [{ validator: validateAge, trigger: 'blur' }]}}
}

表单重置和清除验证

ElementUI 提供了表单重置和清除验证状态的方法。

methods: {resetForm() {this.$refs.formRef.resetFields()},clearValidate() {this.$refs.formRef.clearValidate()}
}

动态表单验证

对于动态增减的表单项,需要特别注意验证规则的更新。ElementUI 支持动态添加和移除验证规则。

methods: {addItem() {this.form.items.push({ value: '' })this.rules.items.push({ value: [{ required: true, message: '请输入值', trigger: 'blur' }]})}
}

异步验证

某些场景需要异步验证,如检查用户名是否已存在。可以通过返回 Promise 实现异步验证。

data() {const checkUsername = (rule, value, callback) => {return new Promise((resolve, reject) => {if (!value) {return reject(new Error('请输入用户名'))}setTimeout(() => {if (value === 'admin') {reject(new Error('用户名已存在'))} else {resolve()}}, 1000)})}return {rules: {username: [{ validator: checkUsername, trigger: 'blur' }]}}
}

表单验证事件

ElementUI 表单提供多种验证事件,可以监听表单和表单项的验证状态变化。

<el-form @validate="onValidate"@submit.native.prevent><el-form-item @change="onFieldChange"></el-form-item>
</el-form>

验证规则参数详解

ElementUI 验证规则支持多种配置参数:

  • required: 是否为必填项
  • message: 验证失败时的提示信息
  • trigger: 触发验证的事件,如 blurchange
  • validator: 自定义验证函数
  • pattern: 正则表达式验证
  • min/max: 最小/最大长度或值
rules: {email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],phone: [{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }]
}

限制表单输入类型

正整数

<el-input v-model="params.insAmt" maxlength="10" oninput="value=value.replace(/\D/g, '')"><template slot="append">万元</template></el-input>

大于零的数

 <el-input v-model="params.intendedPrice" maxlength="10"oninput="value=value.replace(/^\D*([0-9]\d*\.?\d{0,4})?.*$/,'$1')"></el-input>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过ansible playbook创建azure 资源

安装 Ansible 在 macOS 上 Ansible 可以通过多种方式在 macOS 上安装,推荐使用 pip 或 Homebrew。 使用 Homebrew 安装 Ansible 运行以下命令: brew install ansible使用 pip 安装 Ansible 确保 Python 已安装(macOS 通常自带 Python),然后运行: pip install ansible…

Spring框架学习day4--Spring集成Mybatis(IOC)

Spring集成Mybatis1.添加jar包&#xff08;pom.xml&#xff09;2.配置sqlSessionFactiory&#xff08;spring.xml)3.再service类中注入Dao代理接口4.测试类5文件结构 Spring集成Mybatis Spring集成Mybatis其核心是将SqlSessionFactory交由Spring管理&#xff0c;并由 Spring管理…

可靠数据传输原理

目录 构造可靠数据传输协议 一、rdt1.0&#xff1a;理想信道下的可靠传输 核心假设与功能 二、rdt 2.0&#xff1a;带差错检测的停等协议 核心假设与功能 三、rdt 2.1&#xff1a;修复 ACK/NAK 不可靠性 核心改进 四、rdt 2.2&#xff1a;纯 ACK 实现的可靠传输 核心改…

Python Day33

Task&#xff1a; MLP神经网络的训练 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; 3.cuda的检查 4.简单神经网络的流程 a.数据预处理&#xff08;归一化、转换成张量&#xff09; b.模型的定义 i.继承nn.Module类 ii.定义每一个层 iii…

社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源

熟悉东哥的朋友都知道&#xff0c;我自己也运营一个电商社群&#xff0c;主要是针对玩私域|鱼塘的电商玩家。 在当前电商环境下&#xff0c;社群分享型电商、店群卖家及私域鱼塘运营者&#xff0c;面临着日益复杂的订单管理和客服调度问题。传统的人工处理不仅效率低…

github双重认证怎么做

引言 好久没登陆github了&#xff0c; 今天登陆github后&#xff0c;提醒进行2FA认证。 查看了github通知&#xff0c;自 2023 年 3 月起&#xff0c;GitHub 要求所有在 GitHub.com 上贡献代码的用户启用一种或多种形式的双重身份验证 (2FA)。 假如你也遇到这个问题&#xf…

Linux Docker 安装oracle19c数据库教程

Oracle 19c 是甲骨文公司&#xff08;Oracle Corporation&#xff09;发布的一款关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;属于 Oracle Database 19c 版本。它是 Oracle 12c 和 18c 系列的后续版本&#xff0c;提供了多个重要的功能改进和新特性&#xf…

jenkins报错java.lang.OutOfMemoryError: Java heap space

报错信息 2025-05-27 09:17:16.2340000 [id38] WARNING j.u.ErrorLoggingScheduledThreadPoolExecutor#afterExecute: failure in task not wrapped in SafeTimerTask java.lang.OutOfMemoryError: Java heap spaceat java.base/java.lang.StringUTF16.compress(StringUTF16.j…

【Bug】定时任务中 Jpa Save 方法失效

【Bug】定时任务中 Jpa Save 方法失效 首先说一下问题&#xff0c;在定时任务中调用 jpa 的 save 方法没有效果&#xff0c;但是通过外界调用&#xff0c;比如 controller 中注入 service 来调用是可以的&#xff0c;真是巨巨巨离谱&#xff0c;我被折磨了好几天。 我这个问题…

【Redis】热点key问题,的原因和处理,一致性哈希,删除大key的方法

热点 Key 指单个 Key 被高并发访问&#xff08;如爆款商品&#xff09;&#xff0c;导致 Redis 压力骤增。解决方案应针对 “单个 Key 高并发”&#xff1a; 分片缓存&#xff1a;将热点 Key 分散到不同 Redis 节点&#xff08;如按一致性哈希算法分片&#xff09;。本地缓存&…

通过远程桌面连接Windows实例提示“出现身份验证错误,无法连接到本地安全机构”错误怎么办?

本文介绍通过远程桌面连接Windows实例提示“出现身份验证错误无法连接到本地安全机构”错误的解决方案。 问题现象 通过本地电脑内的远程桌面连接Windows实例提示“出现身份验证错误&#xff0c;无法连接到本地安全机构”错误。 问题原因 导致该问题的可能原因如下&#x…

[python] argparse怎么指定bool类型?

前述 最近在写脚本的时候想要实现一个if 操作&#xff0c;通过用户输入。确定要不要启用某个语句。 非常自然的就是使用python的argparse包&#xff0c;但是发现了一个陷阱&#xff0c;记录下。 陷阱 argparse.ArgumentParser() 可以指定输入类型&#xff0c;我可以设定为bo…

Rust 学习笔记:迭代器

Rust 学习笔记&#xff1a;迭代器 Rust 学习笔记&#xff1a;迭代器Iterator trait 和 next 方法使用迭代器的方法生成其他迭代器的方法使用闭包捕获它们的环境 Rust 学习笔记&#xff1a;迭代器 在 Rust 中&#xff0c;迭代器负责遍历每个项的逻辑。迭代器是懒惰的&#xff0…

【深度剖析】义齿定制行业数字化转型模式创新研究(上篇2:痛点和难点分析)

数字化转型正在重塑义齿行业的生态格局,但也面临技术融合与模式变革的深层挑战。当前,义齿定制行业正处于从传统手工制造向全流程数字化制造转型的关键阶段。3D扫描、CAD/CAM(计算机辅助设计与制造)、3D打印等技术的广泛应用,显著提升了义齿制作的精度和效率。传统石膏模型…

window安装nginx

步骤1&#xff1a;下载Nginx for Windows​ 访问Nginx官网下载页面&#xff1a;https://nginx.org/en/download.html 在​​Stable version​​&#xff08;稳定版&#xff09;下找到Windows版本&#xff0c;点击下载.zip文件&#xff08;如 nginx-1.28.0.zip&#xff09; 步…

气象算法工程师学习路径

目录 &#x1f324;️ 气象学与数值预报基础课程&#x1f916; 气象人工智能与数据分析课程&#x1f4d8; 进阶与实战课程推荐&#x1f9ed; 学习建议与路径规划 如果希望成为一名气象算法工程师&#xff0c;并寻找深入浅出、理论与实践结合的学习资源&#xff0c;以下是为你精…

回调函数的理解

int yuxiangrousi 0; // 全局变量&#xff1a;鱼香肉丝&#xff08;酱油量&#xff09;// 回调函数&#xff1a;妈妈处理酱油&#xff08;将酱油加入鱼香肉丝&#xff09; void mother_callback(int new_jiangyou) {yuxiangrousi new_jiangyou; // 把酱油放进鱼香肉丝 }// 孩…

多部手机连接同一wifi的ip一样吗?如何更改ip

通常情况下&#xff0c;多部手机连接同一个WiFi时&#xff0c;它们的IP地址是各不相同的&#xff08;在局域网内&#xff09;。但是&#xff0c;从互联网&#xff08;外网&#xff09;的角度看&#xff0c;它们共享同一个公网IP地址。让我详细解释一下&#xff0c;并说明如何更…

环境温度通过H2A.Zub和H3K27me3动态调控拟南芥细胞命运决定

2025年4月22日&#xff0c;中国科学院遗传与发育生物学研究所肖军研究组在Developmental Cell在线发表了题为Dynamic control of H2A.Zub and H3K27me3 by ambient temperature during cell fate determination in Arabidopsis的研究论文&#xff0c;本研究综合运用ChIP-seq、C…

2024 吉林 CCPC

文章目录 2024 吉林 CCPCL. Recharge&#xff08;思维、分配&#xff09;G. Platform Game(模拟)E. Connect Components (排序、思维)D. Parallel Lines 2024 吉林 CCPC 题目链接&#xff1a; Dashboard - The 2024 CCPC National Invitational Contest (Changchun) , The 17…