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

2023-11-16

实现效果

 实现

<div class="registerWarp">
          <el-form
            label-position="top"
            label-width="100px"
            :model="form"
            ref="ruleFormRef"
            :rules="rulesForm"
            hide-required-asterisk
            class="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-input
                v-model="form.pwd"
                type="password"
                show-password
                placeholder="登录密码"
              />
            </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-input
                v-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 方法进行表单校验,依次触发每个校验规则。

实现效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 身体动画不流畅

    下面代码中的 spaceShip 在开始按住任何箭头键时移动并不顺利 它移动一步 冻结一瞬间 然后 平稳 地移动 怎样才能让它从一开始就顺利运转 而不是 冻结 My code
  • 隐藏类以及 {} 对象与自定义构造函数之间的等效性 (v8)

    鉴于这篇文章 http richardartoul github io jekyll update 2015 04 26 hidden classes html http richardartoul github io jekyll upd
  • Vue.js 中计算属性和普通数据的区别

    我观察到 当一个正常的财产来自data 和从它派生的计算属性通过事件传递 前者保持其反应性 而后者失去它 我为其设置了以下测试用例 也作为 JSFiddle https jsfiddle net christophfriedrich b27
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • 谷歌云功能发送重复通知

    我有一个发送主题通知的 gcf 我从管理 Android 应用程序触发该功能 一切都按预期工作 但突然该函数发送通知两次 有时三次 谷歌云上的函数日志显示该函数已发送一条通知 它只打印一行 定制发送成功 但 Android 应用程序会收到多
  • 使用 jquery .find() 获取子项

    我有以下标记 div div class item div class item box div class one div div div div class item div class item box div class one d
  • 如何在JQGrid的行编辑中禁用某些单元格的编辑?

    当我单击网格的任何行时 所有可编辑的列都变为可编辑 我希望每行的某些列都可以单独编辑 Column 1 Column 2 Column 3 ROW Number 1 editable non editable non editable RO
  • 如何通过 npm 安装包而不设置 package.json

    As per this https stackoverflow com questions 29276345 npm save installed packages as dependencies发布可以先安装 npm 包然后再创建包 js
  • 当焦点/单击[重复]时选择 contenteditable div 中的所有文本

    这个问题在这里已经有答案了 我有 contenteditable div 如下 div style border solid 1px D31444 12 some text div 我需要的是 当我点击 div 时 所有文本都会自动被选中
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 如何处理 Nuxt 中导致页面渲染崩溃的 apollo 客户端错误?

    我目前正在维护一个生产 Nuxt js Vue 应用程序 该应用程序集成了 GraphQL Apollo 客户端 该客户端遇到页面渲染错误 为了增加获得回复的机会 我构建了一个简单的代码示例 仅展示我们遇到的问题 谢谢大家 源代码 Clie
  • 卸载 React 时删除事件监听器

    我有更高阶的组件 反应如下 export default function InnerComponent class InfiniteScrolling extends React Component constructor props s
  • 节点大小与 D3 中的子节点数量成正比

    我创建了这个点击 展开 折叠网络 http jsfiddle net 5Lv8gkqv http jsfiddle net 5Lv8gkqv var width 960 height 500 root name Chocolate tag
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco

随机推荐

  • [NOIP1998 普及组] 阶乘之和

    题目描述 用高精度计算出 S 1 2 3 n n 50 其中 表示阶乘 定义为 n n n 1 n 2 1 例如 5 5 4 3 2 1 120 输入格式 一个正整数 n 输出格式 一个正整数 S 表示计算结果 输入输出样例 输入 1 3
  • 华为机试题:HJ107 求解立方根(python)

    文章目录 1 题目描述 2 Python3实现 3 知识点详解 1 input 获取控制台 任意形式 的输入 输出均为字符串类型 1 1 input 与 list input 的区别 及其相互转换方法 2 print 打印输出 3 whil
  • MyBatis中Like模糊查询的几种写法和注意点

    目录 友情提醒 第一章 Mybatis中SQL语句的模糊查询 1 1 第一种方式 直接双引号拼接 1 2 第二种方式 数据库为MySQL时用CONCAT 函数 1 3 第三种方式 bind元素 友情提醒 先看文章目录 大致了解知识点结构 直
  • spring cloud alibaba 学习(三)Nacos-NacosNamingService初始化流程

    1 NacosServiceManager 的创建 Configuration proxyBeanMethods false ConditionalOnDiscoveryEnabled ConditionalOnNacosDiscovery
  • linux shell脚本

    微信可以设置雪花昵称了 真漂亮 一 Shell中有许多预定义的特殊字符 n n是一个数字 大于10则用大括号括起来 12 代表程序的第n个参数 总共有多少个参数 指所有的参数 指所有的参数 上次命令执行的返回值 注意 我们发现 和 的意思是
  • 计算机网络-04 网络路由

    第四讲 网络路由 给每次数据传输确定一个端到端的路径 通常是找到两点之间的最小代价路径 保存在路由器的转发表FIB中 基于分布式计算 网络模型用无向图表示 节点是网络设备 路由器 节点间链路是带权重的边 权重即链路开销 可以是延迟 拥塞程度
  • PHP: 深入pack/unpack

    PHP作为一门为web而生的服务器端开发语言 被越来越多的公司所采用 其中不乏大公司 如腾迅 盛大 淘米 新浪等 在对性能要求比较高的项目中 PHP也逐渐演变成一门前端语言 用于访问后端接口 或者不同项目之间需要共享数据的时候 通常可以抽取
  • 外部中断库函数

    外部中断 STM32外部中断简介 GPIO 跟中断线的映射关系 主函数讲解 外部中断初始化函数 STM32外部中断简介 STM32 的每个 IO 都可以作为外部 中断的中断输入口 这点也是 STM32 的强大之处 STM32F103 的中断
  • selenium浏览器驱动下载

    Chrome谷歌浏览器 下载地址 http chromedriver storage googleapis com index html 不同的Chrome的版本对应的chromedriver exe 版本也不一样 下载时不要搞错了 如果是
  • 升压BOOST电路和降压BUCK电路最容易的理解

    升压电路框图 首先在了解BOOST电路时 要学会如何分析最简单的升压电路框图 如图 首先识别每个元件基本功能 电感 储能i电感 MOS管 开关作用 二极管 续流 电容 储能电容 了解升压电路的原理 要明白Vout和Vin的差别 所以我们从V
  • Centos 7 - Anaconda3 安装教程及报错集锦 - 取消自动激活 base 环境方法

    目录 序言 1 报错 WARNING cannot verify mirrors tuna tsinghua edu cn s certificate issued by C US O Let s Encrypt CN R3 Issued
  • 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 前言 本篇文章
  • ubuntu16.04 编译ARM平台qt5.12.3

    环境 系统 ubuntu16 04 开发板 IMAX8 IMAX8交叉编译工具aarch64 linux gnu 编译步骤 1 配置交叉编译环境 sudo gedit etc bash bashrc 在最后一行加入交叉编译工具的bin目录
  • TypeScript 快速入门

    目录 第一章 快速入门 0 TypeScript简介 1 TypeScript 开发环境搭建 2 基本类型 3 编译选项 4 webpack 5 Babel 第一章 快速入门 0 TypeScript简介 TypeScript是JavaSc
  • 整数类型

    C 中提供的整数类型有三种 int long short 每种类型又分为有符号和无符号两种类型 有符号整数既可以表示非负整数 又可以表示负整数 但是 无符号整数不能表示负数 只能表示非负整数 一 无符号整数 在内存中 int整数通常占4字节
  • NFC----PN532

    一 PN532简介 1 1 PN532由NXP出品 是一款高度集成的载波的13 56MHz传输模块 基于80C51内核有40KROM 1KRAM 使用不同的固件支持13 56MHz频段的无线协议 硬件接口 I2C SPI 高速UART HS
  • 网络阶段总结

    网络阶段总结 1 网络访问常用代码格式 NSURL url nil NSURLRequest requst NSURLRequest requestWithURL url cachePolicy 0 timeoutInterval 10 0
  • 机器学习算法学习一--------学习链接

    1 这个github是java的机器学习算法 对于我这个java程序员来说 挺不错的点击打开链接 2 这个博客基础理论不错点击打开链接
  • -bash: cannot create temp file for here-document: No space left on device

    1 现象 登陆Linux系统后 cd 到某个指定目录时使用tab键的时候报以下错误 bash cannot create temp file for here document No space left on device 2 原因 不能
  • Vue项目中使用el-form校验用户输入字段是否符合条件验证-demo

    实现效果 实现 div class registerWarp div