登录的表单验证

article/2025/10/10 1:39:37

最近在学习如何使用 VUE 框架编写后台管理系统,首先完成的是登录页面,登录页面中需要给 Form 表单配置登录验证,现总结如下:

参考文档

Element组件库

登录页面中创建组件使用的是 Element 组件库中的Form表单在这里插入图片描述
使用文档:Element中Form表单
在这里插入图片描述
该文档中包含表单验证的实现方法教学,本文参考了该篇文档。

完成基本的登录功能后,登录页面如下
在这里插入图片描述

现在开始配置登录验证

验证规则绑定

所有的验证在配置规则前都需要设置下面三步

1. 将 From 组件的 model 绑定表单数据对象

<template><div class="login-container"><div class="login-form-wrap"><el-formclass="login-form":model="user"></el-form></div></div>
</template>

将需要验证的 Form 表单 el-form 的 model 属性设置为表单传输的数据对象 user

2. 将需验证的表单项的 prop 绑定表单对象中的数据项

<template><div class="login-container"><div class="login-form-wrap"><el-form><el-form-item prop="mobile"><!-- 输入框 input 组件 双向绑定 from 数据 --><el-inputv-model="user.mobile"placeholder="请输入手机号"></el-input></el-form-item><el-form-item prop="code"><!-- 输入框 input 组件 双向绑定 from 数据 --><el-inputv-model="user.code"placeholder="请输入验证码"></el-input></el-form-item><el-form-item prop="agree"><el-checkbox v-model="user.agree">我已阅读并同意用户协议和隐私条款</el-checkbox></el-form-item></el-form></div></div>
</template>

将需要验证的三个el-form-Item 表单项 手机号、验证码和用户协议 的 prop 属性值指定为表单数据对象user中的数据名称 data、code和agree在这里插入图片描述

3. 将 Form 组件的 rules 绑定验证规则数据

  • 新建数据对象 formRules ,用来配置具体规则
<script>
export default {data () {return {formRules: {}}}
}
</script>

Element 中的 Form 组件提供了表单验证的功能,只需要通过 rules 属性传入

<template><div class="login-container"><div class="login-form-wrap"><el-formclass="login-form":model="user":rules="formRules"></el-form></div></div>
</template>

将 Form 组件 el-form 的 rules 属性值设置为 data 中的数据对象 formRules

配置规则

在数据对象 formRules 中配置规则
Element 中约定好了 Form 组件的表单验证规则
使用文档:验证规则

一般规则

上述约定好的规则中部分常用的规则说明如下图:
在这里插入图片描述

  • required
    required 规则用来设置是否为必须的,值为true则必须填写该表单项
  • message
    message 用来设置验证是啊比提示信息,即表单项中的数据不满足验证规则时显示的提示信息
  • trigger
    trigger 用来设置触发验证的时机,属性值有两种
属性值意义
blur失去焦点时触发验证
change表单项数据改变时触发验证
  • pattern
    使用正则表达式配置规则
<script>
export default {data () {return {formRules: {// 要验证的数据名称:规则列表[]mobile: [{ required: true, message: '请输入手机号', trigger: 'change' },{ pattern: /^1[3|5|7|8|9]\d{9}$/, message: '请输入正确的手机号', trigger: 'change' }],code: [{ required: true, message: '请输入验证码', trigger: 'change' },{ pattern: /^\d{6}$/, message: '请输入正确的验证码格式', trigger: 'change' }]}}}
}
</script>

当前设置的 mobile 手机号 的验证规则:

  1. require规则:必须填写,未填写时显示验证失败提示信息:“请输入手机号”
  2. pattern规则:是以1开头第二位是3或5或7或8或9的9位整字,不满足时显示验证失败提示信息:‘请输入正确的手机号’

当前设置的 code 验证码 的验证规则:

  1. require 规则:必须填写,未填写时显示验证失败提示信息:“请输入验证码”
  2. pattern 规则:是6位整数,不满足时显示验证失败提示信息:“输入正确的验证码格式”

自定义规则

Element自身约定好的表单验证规则不满足需要时,可以自定义规则。
自定义验证规则的函数为 validator

  • 参数

validator函数的参数是 rule , value 和 callback ,valid 参数传入验证的数据对象的值。

  • 返回值
    validate 函数的返回值通过callback来设置
    一般情况下:
验证情况返回值
通过callback()
失败callback(new Error(‘验证失败提示信息’))

validator 验证函数不是外部调用的,而是当 Element 的 Form 表单组件触发验证时自己内部调用,使用时只需要提供函数处理的逻辑

<script>
export default {data () {return {formRules: {// 要验证的数据名称:规则列表[]agree: [{// 自定义验证规则validator: (rule, value, callback) => {if (value) {// 验证通过callback()} else {// 验证失败callback(new Error('请勾选用户协议'))}},trigger: 'change'}]}}}
}
</script>

当前设置的 agree 用户协议 的规则:

  1. 当 agree = true 即已勾选用户协议时返回 callback() ,验证成功。
  2. 当 agree = false 即未勾选用户协议时返回验证失败提示信息:“请勾选用户协议”

手动触发验证

登录页面需要在点击登录按钮时触发验证,通过 Form 组件的 validate() 方法实现
在这里插入图片描述

1.设置 From 组件的 ref

<template><div class="login-container"><div class="login-form-wrap"><el-formclass="login-form"ref="login-form":model="user":rules="formRules"></el-form></div></div>
</template>

给 Form 组件 el-form 设置一个 ref,起一个名字。

调用 validate()

<script>
export default {methods: {onLogin () {// 表单验证// validate 方法是异步的this.$refs['login-form'].validate(valid => {// 如果表单验证失败,停止请求提交if (!valid) {return}// 验证通过,提交登录this.login()})}}
}
</script>

在登录按钮绑定的方法 onLogin() 中,通过 ref 获取 Form 组件 el-form ,调用 validate() 方法,触发表单验证。

  • 验证失败
    退出 onLogin() 方法,不提交登录请求

  • 验证通过
    提交登录请求

结果

最终的表单如下:

  • 输入为空
    在这里插入图片描述
    改变了默认页面的数据,触发验证,显示验证的表单项未填写时的验证失败提示信息
  • 输入格式错误
    在这里插入图片描述
    改变了默认页面的数据,触发验证,显示验证的表单项不满足格式时的验证失败提示信息
  • 点击登录按钮
    点击登录前的默认页面
    在这里插入图片描述
    点击登录后
    在这里插入图片描述
    点击登录按钮,触发验证。
    未勾选用户协议,显示用户协议表单项的数据不满足自定义规则时的验证失败提示信息

上方展示的代码均仅限于实现该步骤的功能的部分,完整代码如下:

<template><!-- 根节点 --><div class="login-container"><div class="login-form-wrap"><!--el-form 表单组件每个表单项都必须使用 el-form-item 组件包裹--><div class="login-head"><h1>登录</h1><!-- <div class="logo"></div> --></div><!--配置 Form 表单验证:1、必须给 el-from 组件绑定 model 为表单数据对象2、给需要验证的表单项 el-form-Item 绑定 prop 属性注意prop属性需要制定表单对象中的数据名称3、通过 el-form 组件的 rule 属性配置验证规则手动触发表单验证:1. 给 el=from 设置 ref  (起个名字)2. 通过 ref 获取 el-form 组件,调用组件的 validate 方法进行验证--><el-formclass="login-form"ref="login-form":model="user":rules="formRules"><!-- 提示文本 --><el-form-item prop="mobile"><!-- 输入框 input 组件 双向绑定 from 数据 --><el-inputv-model="user.mobile"placeholder="请输入手机号"></el-input></el-form-item><el-form-item prop="code"><!-- 输入框 input 组件 双向绑定 from 数据 --><el-inputv-model="user.code"placeholder="请输入验证码"></el-input></el-form-item><el-form-item prop="agree"><el-checkbox v-model="user.agree">我已阅读并同意用户协议和隐私条款</el-checkbox></el-form-item><el-form-item><el-buttonclass="login-btn"type="primary":loading="loginLoading"@click="onLogin">登录</el-button></el-form-item></el-form></div></div>
</template><script>
import { login } from '@/api/user' // 按需加载export default {name: 'LoginIndex',components: {},props: {},data () {return {user: {mobile: '13911111111', // 手机号code: '246810', // 验证码agree: false // 是否同意协议},// checked: false, // 是否同意协议的选中状态loginLoading: false, // 登录的 loading 状态formRules: { // 表单验证规则配置// 要验证的数据名称:规则列表[]mobile: [// 必填项{ required: true, message: '请输入手机号', trigger: 'change' },{ pattern: /^1[3|5|7|8|9]\d{9}$/, message: '请输入正确的手机号', trigger: 'change' }],code: [{ required: true, message: '请输入验证码', trigger: 'change' },{ pattern: /^\d{6}$/, message: '请输入正确的验证码格式', trigger: 'change' }],agree: [{// 自定义验证规则validator: (rule, value, callback) => {if (value) {// 验证通过callback()} else {// 验证失败callback(new Error('请勾选用户协议'))}},// message: '请勾选同意用户协议',trigger: 'change'}]}}},computed: {},watch: {},created () {},mounted () {},methods: {onLogin () {// // 获取表单数据(根据接口要求绑定数据)// const user = this.user// 表单验证// validate 方法是异步的this.$refs['login-form'].validate(valid => {// 如果表单验证失败,停止请求提交if (!valid) {return}// 验证通过,提交登录this.login()})},login () {// 开启登陆中 loading...this.loginLoading = truelogin(this.user).then(res => {console.log(res) // 提取数据// 登录成功this.$message({message: '登录成功',type: 'success'})// 关闭 loading...this.loginLoading = false// 将接口返回的用户相关数据存储到本地window.localStorage.setItem('user', JSON.stringify(res.data.data))// 跳转到首页this.$router.push({name: 'home'})}).catch(err => {// 登陆失败console.log('登录失败', err) // 错误提示this.$message.error('登录失败,手机号或验证码错误')// 关闭 loading...this.loginLoading = false})}}
}
</script><style scoped lang="less">
.login-container {// 整个页面position: fixed;left: 0;top: 0;right: 0;bottom: 0;// form 内容display: flex; // 默认水平排列flex-direction: column; // 设置上下排列// form 水平居中justify-content: center;// form 垂直居中align-items: center;// 背景图片background: url("./login_bg.jpg") no-repeat;background-size: cover;.login-form-wrap {min-width: 300px;padding: 30px 50px 10px;background-image: linear-gradient(to top, #fdcbf1 0%, #fdcbf1 1%, #e6dee9 100%);.login-head {display: flex;justify-content: center;color: #5d8dfd;.logo {width: 200px;height: 57px;// background: url("./logo_index.png") no-repeat;background-size: contain;}}// form.login-form{.login-btn{width: 100%;background-image: linear-gradient(120deg, #a6c0fe 0%, #f68084 100%);}}}
}
</style>

该代码包含其他功能的实现,仅供参考。

以上为个人总结的登录的表单验证,如有错误请多包含,欢迎在评论区指出。
也欢迎其他学习VUE的小伙伴在评论区一起交流,祝所有看到这篇博客还看到结尾这里的人都能成为前端大佬!


http://chatgpt.dhexx.cn/article/JFTswoJ6.shtml

相关文章

如何实现页面登录验证

现在很多网站在登录的时候都需要输入验证码&#xff0c;现在输入的验证码方式层出不穷有单单是数字的、字母&#xff08;又分大小写&#xff09;的&#xff0c;有数字、字母混合的&#xff0c;有给出运算表达式需要回答结果的&#xff0c;还有的卡片移动组合的...&#xff0c;为…

token登陆验证

登陆业务的实现 由于http是无状态的&#xff0c;那么应该如何记住登录状态呢&#xff1f; 单一应用的服务中常见做法是在客户端cookie中保存sessionId,服务器端的session中保存sessionid,每次客户端发送请求的时候都带上sessionid&#xff0c;在服务器端进行验证。 在分布式系…

登录界面的验证

用html、css、js做一个简单的登录界面的验证 做一个登录界面验证 用户名不允许为空 密码为6-16位数字 邮箱要用email格式 手机号必须1开头且为11位数 地址必须填写 必须勾选同意协议才可以提交 css 用户名框验证如下 var flag true;if(name.length<1){$(msgName).innerT…

登录页面验证

页面组件 登录页 <template><div><p>用户名&#xff1a;<input type"text" v-model"userName" /></p><p>密码&#xff1a;<input type"text" v-model"passWord" /></p><button …

JavaScript登录验证

要求 账号&#xff1a;3-15位并且不能数字开头 密码&#xff1a;6-18位并且不能全是数字或者全是字符 页面代码 <body> <form><label>用户名:</label><input type"text" id"userName" name"userName" placeholder…

用户登陆验证

我们在操作各种软件的过程中&#xff0c;都涉及“用户登陆”的操作。例如登陆QQ、微信等软件&#xff0c;都需要用户名和密码的验证。 现在我们要开发一个图书馆管理系统&#xff0c;系统需要一个登陆的功能&#xff0c;我们应该怎么样实现用户登陆的验证功能&#xff1f; 我们…

Web 登录验证

前言&#xff1a;Web 用户的身份验证&#xff0c;及页面操作权限验证是B/S系统的基础功能&#xff0c;一个功能复杂的业务应用系统&#xff0c;通过角色授权来控制用户访问&#xff0c;本文通过Form认证&#xff0c;Mvc的Controller基类及Action的权限验证来实现Web系统登录&am…

如何实现验证登录

开发工具与关键技术&#xff1a;VS .MVC基础 作者&#xff1a;卢雅婷 撰写时间&#xff1a;2019/05/6 &#xff08;代码来源于老师&#xff09; 实现验证登录这个操作是一些软件使用前的操作&#xff0c;第一步是注册&#xff0c;再就是登陆软件&#xff0c;&#xff08;比喻微…

实现登录验证

最近练习搭建了一个后台管理系统,首先第一步做了关于验证登录的功能.以下项目使用了Nacos作为服务发现和注册中心,将Auth和gateway,system等相关多个微服务注册进Nacos.每次刷新登录页面,就会获取新的验证码(,输入正确的验证码即可成功跳转至首页. 获取验证码url:http://localh…

【图解】用户登录验证流程,这下彻底搞懂了!

开发者&#xff08;KaiFaX&#xff09; 面向全栈工程师的开发者 专注于前端、Java/Python/Go/PHP的技术社区 本文通过图示及代码的方式介绍用户登录流程及技术实现&#xff0c;内容包括用户登录&#xff0c;用户验证&#xff0c;如何获取操作用户的信息以及一些黑名单及匿名接口…

前端应该掌握的登录认证知识

1 背景 前一段时间&#xff0c;参与了老项目的迁移工作&#xff0c;配合后端接口迁移时&#xff0c;由于两个项目采取了不一样的登陆方案&#xff0c;所以遇到了跨域登录态无法共享的问题。经过各方协调&#xff0c;最终老项目将迁移页面部署在新项目的指定网关下&#xff0c;…

中间件登录验证(白名单,黑名单)

中间件版的登录验证需要依靠session&#xff0c;所以数据库中要有django_session表。 urls.py from django.conf.urls import url from app01 import viewsurlpatterns [url(r^index/$, views.index),url(r^login/$, views.login, namelogin), ]urls.py View Code views.py fr…

登录验证的那些事儿

前言 在以前的项目我们一般使用session或者cookie来存储已登录的用户信息&#xff0c;这样到达一个免除重复登录的问题&#xff0c;那么如何登录&#xff0c;又如何验证&#xff0c;就是一直在讨论的问题。今天我们对这些技术点进行一个梳理。 字 多 你 就 挑 有 颜 色 的 看…

计算机网络-(自顶向下方法)

计算机网络基础知识概述 计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的&#xff0c;两者需要进行通信&#xff0c;必须要在一定的标准上进行。 …

计算机网络:自顶向下方法 笔记

计算机网络&#xff1a;自顶向下方法 笔记 综述因特网部件图例交换方式分组交换电路交换频分复用时分复用 对比 五层/七协议一个传输实例攻击DOS攻击 应用层应用程序结构客户-服务器结构P2P point2point结构 应用层协议总览http报文格式http状态码cookiesessionhttps FTPSMTPDN…

计算机网络 自顶向下 笔记

目录 第一章 计算机网络和因特网 全书答案评论留言即可 我私发&#xff0c;这里上传不了文本 第一章 计算机网络和因特网 什么是因特网&#xff1f; 因特网的具体构成&#xff1a;构成因特网的基本硬件和软件组件 分布式应用的互联网基础设施来描述 ---------------------…

《计算机网络-自顶向下》04. 网络层-数据平面

文章目录 网络层数据平面和控制平面两者的概述数据平面控制平面 控制平面&#xff1a;传统方法控制平面&#xff1a;SDN 方法网络服务模型 路由器工作原理通用路由器体系结构输入端口的功能基于目标的转发 交换结构内存交换方式总线交换方式纵横式交换方式 输出端口的功能何时何…

计算机网络自顶向下方法 习题参考答案 第一章

复习题&#xff1a; R1. 没有什么不同。PC、服务器、手机等。Web服务器是端系统。 R2. Protocol is commonly described as a set of international courtesy rules. These well-established and time-honored rules have made it easier for nations and people to live a…

计算机网络自顶向下方法(第六版) 课后题答案 | 第三章

复习题 R1. a. 将此协议称为简单传输协议(STP)。在发送方端&#xff0c;STP 从发送过程中接收不超过 1196 字节的数据块、目标主机地址和目标端口号。STP 向每个块添加一个 4 字节的报头&#xff0c;并将目标进程的端口号放在这个报头中。然后 STP 将目标主机地址和报文段提供…

计算机网络—自顶向下 计算机网络和因特网

目录 1. 什么是计算机网络 1.1 概念 1.2 因特网的具体构成 2. 计算机网络的结构 2.1 网络边缘(The Network Edge) 2.1.1 接入网 2.1.2 物理媒体 2. 2 网络核心(The network core) 2.2.1 电路交换 2.2.2 多路复用 2.2.3 报文交换 2.2.4 分组交换 2.2.5 网络之…