Vue项目中使用el-form校验用户输入字段是否符合条件验证-demo

news/2024/11/29 1:46:06/

实现效果

 实现

<div class="registerWarp"><el-formlabel-position="top"label-width="100px":model="form"ref="ruleFormRef":rules="rulesForm"hide-required-asteriskclass="register-form"><el-form-item label="邮箱" prop="email"><el-input v-model="form.email" placeholder="电子邮箱" /></el-form-item><el-form-item label="密码" prop="pwd"><el-inputv-model="form.pwd"type="password"show-passwordplaceholder="登录密码"/></el-form-item><el-form-item><template #label><div class="item-label"><span>填写邀请ID(选填)</span><img:class="{ active: isIdShow }"@click="isIdShow = !isIdShow"src="@/assets/images/register/right-jian.svg"/></div></template><el-inputv-show="isIdShow"v-model="form.idkey"placeholder="填写邀请用户ID"/></el-form-item><el-form-item><div class="form-bottom"><div class="promise">点击注册即表示同意<span>服务协议</span>和<span>隐私条款</span></div><div class="submit-btn">注册</div><div class="switch-login">已有账户?<span>去登录</span></div></div></el-form-item></el-form></div>

一起校验 

<script setup>
import { ref, reactive } from 'vue';
const isIdShow = ref(false);
const ruleFormRef = ref(null);
const form = reactive({email: '',pwd: '',idkey: ''
});
const validatePwd = (rule, value, callback) => {if (!value) {callback(new Error('请输入密码'));}callback();
};
const rulesForm = reactive({email: [{ required: true, message: '请输入邮箱', trigger: 'blur' },{ type: 'email', message: '邮箱输入格式错误', trigger: 'blur' }],pwd: [{ required: true, message: '请输入密码', trigger: 'blur' },{ min: 6, max: 24, message: '密码长度为6-24个字符', trigger: 'blur' },{pattern:/^(?=.*[A-Z])(?=.*\d)(?=.*[~`!@#$%^&*()_\-\+={}0|;;<>.?/])[A-Za-z\d~`!@#$%^&*()_\-\+={}0|;;<>.?/]*$/,message: '密码必须包含至少一个大写字母、一个数字、一个特殊字符',trigger: 'blur'}
//自定义校验规则// {required: true, message: '请输入密码', trigger: 'blur',validator: validatePwd}]
});
</script>

我们使用 el-form 组件创建了一个表单,其中的密码输入框使用了 el-input 组件,并设置了 type 属性为 "password"

然后,在 formRules 中定义了验证规则,包括 required: true 表示必填项,min: 6, max: 24 表示密码长度为6-24个字符,pattern 使用正则表达式来校验密码是否包含至少一个大写字母、一个数字、一个特殊字符。

最后,在提交表单时,通过调用 this.$refs.form.validate 方法进行表单校验,如果校验通过,则执行提交逻辑;如果校验不通过,则会自动显示相应的错误提示信息。

分开校验

<script setup>
import { ref, reactive } from 'vue';
import NormalHeader from '@/components/NormalHeader/index.vue';
const isIdShow = ref(false);
const ruleFormRef = ref(null);
const form = reactive({email: '',pwd: '',idkey: ''
});
const validateUppercase = (rule, value, callback) => {if (!/[A-Z]/.test(value)) {callback(new Error('密码必须包含至少一个大写字母'));} else {callback();}
};
const validateNumber = (rule, value, callback) => {if (!/\d/.test(value)) {callback(new Error('密码必须包含至少一个数字'));} else {callback();}
};
const validateSpecialCharacter = (rule, value, callback) => {if (!/[~`!@#$%^&*()_\-+={}0|;;<>.?/]/.test(value)) {callback(new Error('密码必须包含至少一个特殊字符'));} else {callback();}
};
const rulesForm = reactive({email: [{ required: true, message: '请输入邮箱', trigger: 'blur' },{ type: 'email', message: '邮箱输入格式错误', trigger: 'blur' }],pwd: [{ required: true, message: '请输入密码', trigger: 'blur' },{ min: 6, max: 24, message: '密码长度为6-24个字符', trigger: 'blur' },{ validator: validateUppercase, trigger: 'blur' },{ validator: validateNumber, trigger: 'blur' },{ validator: validateSpecialCharacter, trigger: 'blur' }// {//   pattern://     /^(?=.*[A-Z])(?=.*\d)(?=.*[~`!@#$%^&*()_\-\+={}0|;;<>.?/])[A-Za-z\d~`!@#$%^&*()_\-\+={}0|;;<>.?/]*$/,//   message: '密码必须包含至少一个大写字母、一个数字、一个特殊字符',//   trigger: 'blur'// }]
});
</script>

在上述示例中,我们将每个密码条件分别定义为单独的校验规则。使用 validator 属性来指定自定义的校验方法,其中 validateUppercase 方法用于校验是否包含至少一个大写字母,validateNumber 方法用于校验是否包含至少一个数字,validateSpecialCharacter 方法用于校验是否包含至少一个特殊字符。

在校验方法中,如果条件不满足,我们调用 callback 函数传递一个错误对象,否则调用 callback 函数传递空参数表示校验通过。

最后,在提交表单时,通过调用 this.$refs.form.validate 方法进行表单校验,依次触发每个校验规则。

实现效果


http://www.ppmy.cn/news/1086693.html

相关文章

常见路由跳转的几种方式

常见的路由跳转有以下四种&#xff1a; 1. <router-link to"跳转路径"> /* 不带参数 */ <router-link :to"{name:home}"> <router-link :to"{path:/home}"> // 更建议用name // router-link链接中&#xff0c;带/ 表示从根…

Python---函数

函数定义&#xff1a; """ def 函数名(传入参数):函数体return 返回值 """ 函数调用&#xff1a; """ 函数名(传入参数) """ 例子&#xff1a; # 不带参 def check():print("欢迎光临\n请进") che…

深入浅出AXI协议(4)——猝发传输

一、前言 在之前的文章中&#xff0c;我们着重介绍了关于AXI4的握手协议它可以使得传输的双方都可以自如地控制传输的速率&#xff0c;我们主要介绍了握手协议出现的3种可能情况。然后对于AXI4交易通信的握手信号的关系做出了介绍&#xff1a;&#xff08;1&#xff09;在AXI4互…

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana&#xff0c;默认的话是https协议的&#xff0c;这里写一个使用http…

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止 1. 读取配方的时候没有问题,完全正常,没有任何错误提示。 2. 但是在下载的时候,就提示了“出错。动作异常终止” 根据以往的经验分析,有可能是配方变量里面没有相对应的地址时候下载会出错,但是配方画面相对…

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号&#xff0c;显示成绩】 7、统计。【…

接口文档模版(Markdown版)

场景 最近又又又得给第三方系统写接口文档&#xff0c;需要一个Restful接口模版参考参考。 接口文档模版 # ERP 服务## 监控### 数据POST /system/xxx/getData请求参数&#xff1a;| 字段名 | 类型 | 位置 | 描述 | | ---------- | ------ | ---- | --…

2023年MySQL-8.0.34保姆级安装教程

重点放前面&#xff1a;演示环境为windows环境。 MySQL社区版本安装教程如下&#xff1a; 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤&#xff1a;①安装包的下载&#xff1b;②安装配置设置&#xff1b;③配置环境变量 一、MySQL安装包下载 下载官…