Vue3中使用vee-validate进行表单验证

news2024/11/27 9:40:25

官网:Checkbox and Radio InputsValidating checkboxes and Radio inputshttps://vee-validate.logaretm.com/v4/examples/checkboxes-and-radio/ 

安装vee-validate

npm i -S vee-validate

示例1:

<template>
  <Form
    ref="ref_form"
    class="form"
    :validation-schema="MySchema"
    v-slot="{ errors }"
    autocomplete="off"
  >
    <div>
      <Field
        :class="{ error: errors.username }"
        v-model="formData.username"
        name="username"
        type="text"
        placeholder="请输入用户名"
      ></Field>
      <span class="error" v-if="errors.username">
        {{ errors.username }}
      </span>
    </div>
    <div>
      <Field
        :class="{ error: errors.password }"
        v-model="formData.password"
        name="password"
        type="password"
        placeholder="请输入密码"
      />
      <span class="error" v-if="errors.password">
        {{ errors.password }}
      </span>
    </div>
    <div>
      <button @click="submit()">登录</button>
      <button @click="reset()">重置</button>
      <button @click="check_one()">对用户名单独校验</button>
    </div>
  </Form>
</template>

<script setup>
import { Form, Field } from "vee-validate";
import { reactive, ref } from "vue";

const schema = {
  // 校验username
  username(value) {
    // value是将来使用该规则的表单元素的值
    // 1. 必填
    // 2. 6-20个字符,需要以字母开头
    // 如何反馈校验成功还是失败,返回true才是成功,其他情况失败,返回失败原因。
    if (!value) return "请输入用户名";
    if (!/^[a-zA-Z]\w{5,19}$/.test(value)) return "字母开头且6-20个字符";
    return true;
  },
  password(value) {
    if (!value) return "请输入密码";
    if (!/^\w{6,24}$/.test(value)) return "密码是6-24个字符";
    return true;
  },
  rePassword(value, { form }) {
    if (!value) return "请输入密码";
    if (!/^\w{6,24}$/.test(value)) return "密码是6-24个字符";
    // 校验密码是否一致  form表单数据对象
    if (value !== form.password) return "两次密码不一致";
    return true;
  },
  mobile(value) {
    if (!value) return "请输入手机号";
    if (!/^1[3-9]\d{9}$/.test(value)) return "手机号格式错误";
    return true;
  },
  code(value) {
    if (!value) return "请输入验证码";
    if (!/^\d{6}$/.test(value)) return "验证码是6个数字";
    return true;
  },
  isAgree(value) {
    if (!value) return "请勾选同意用户协议";
    return true;
  },
};
const ref_form = ref(null);

const formData = ref({
  username: null,
  password: null,
});
const MySchema = {
  // 校验函数规则:返回true就是校验成功,返回一个字符串就是失败,字符串就是错误提示
  username: schema.username,
  password: schema.password,
};

// 未生效
const reset = () => {
  formData.value.username = null;
  formData.value.password = null;
  ref_form.value.resetForm();
};
const check_one = () => {
  const data = schema.username(formData.value.username);
  console.log("check_one", data);
};
const submit = async () => {
  const data = await ref_form.value.validate();
  console.log("submit", data);
};
</script>

<style lang="scss" scoped>
.error {
  color: red;
}
</style>

示例2:

<template>
  <div id="app">
    <Form :validation-schema="schema" @submit="onSubmit" v-slot="{ values }">
      <Field name="drink" type="radio" value="" /> 无
      <Field name="drink" type="radio" value="Tea" /> 茶
      <Field name="drink" type="radio" value="Coffee" /> 咖啡

      <button>提交</button>
      <ErrorMessage name="drink" style="color: red" />
      {{ values }}
    </Form>
  </div>
</template>

<script setup lang="ts">
import { Form, Field, ErrorMessage } from "vee-validate";

const schema = {
  drink: (value) => {
    if (value) {
      return true;
    }

    return "必须选择一样";
  },
};

function onSubmit(values) {
  console.log(JSON.stringify(values));
}
</script>

示例3:

参考:ValidationField-level and form-level validation and validation behavior and error messageshttps://vee-validate.logaretm.com/v4/guide/components/validation/

<template>
  <Form>
    <Field name="field" :rules="isRequired" />
    <ErrorMessage name="field" style="color: red" />
  </Form>
</template>
<script setup>
import { Field, Form, ErrorMessage } from "vee-validate";
function isRequired(value) {
  if (value && value.trim()) {
    return true;
  }
  return "不能为空";
}
</script>

 示例4:async

<template>
  <div>
    <Form @submit="onSubmit">
      <Field name="email" :rules="validateEmail" type="email" />
      <ErrorMessage name="email" style="color: red" />

      <div>
        <button type="submit">Submit</button>
      </div>
    </Form>
  </div>
</template>
<script setup lang="ts">
import { Field, Form, ErrorMessage } from "vee-validate";

const mockApiRequest = (value) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(value === "test@example.com");
    }, 100);
  });
};

function onSubmit(values) {
  console.log(JSON.stringify(values, null, 2));
}

async function validateEmail(value) {
  const result = await mockApiRequest(value);

  return result ? true : "邮箱错误";
}
</script>

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

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

相关文章

旅游卡景区小程序购票核销分销app系统

旅游业的蓬勃发展&#xff0c;景区旅游卡也逐渐成为游客出行的常见选择。为了提升景区旅游卡的购买和使用体验&#xff0c;许多景区开始采用小程序来提供购票和核销服务。同时&#xff0c;为了更好地推广景区旅游卡&#xff0c;许多景区也开发了分销App系统&#xff0c;以提供更…

linux代码提交记录 linus亲手改代码

kernel/git/torvalds/linux.git - Linux kernel source tree

【Megatron-DeepSpeed】张量并行工具代码mpu详解(一):并行环境初始化

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a;并行环境初始化 【深度学习】【分布式训练】DeepSpeed&#xff1a;AllReduce与ZeRO-DP 【深度学习】混合精度训练与显存分析 【深度学习】【分布式训练】Collective通信操作及Pytorch示例 【自然语言处…

DOM“文档对象模型”

目录 DOM 1.节点层级 1.2.节点 常用节点 文档节点&#xff08;document&#xff09; 元素节点&#xff08;Element&#xff09; 属性节点&#xff08;Attribute) 文本节点&#xff08;Text&#xff09; 其他节点 DocumentType Comment DocumentFragment 1.3.节点树…

力扣 501. 二叉搜索树中的众数

题目来源&#xff1a;https://leetcode.cn/problems/find-mode-in-binary-search-tree/description/ C题解1&#xff1a;使用中序遍历将二叉搜索树有小到大放进数组中&#xff0c;在寻找最大数组。 class Solution { public:void traversal(TreeNode* node, vector<int>…

操作系统7:进程死锁

目录 1、死锁概述 &#xff08;1&#xff09;计算机中的资源分类 1.1 - 可重用性资源和消耗性资源 1.2 - 可抢占性资源和不可抢占性资源 &#xff08;2&#xff09;计算机系统中的死锁 &#xff08;3&#xff09;死锁的定义、必要条件和处理方法 3.1 - 死锁的定义 3.2 …

运输层:TCP拥塞控制

1.运输层&#xff1a;TCP拥塞控制 笔记来源&#xff1a; 湖科大教书匠&#xff1a;TCP的拥塞控制 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 网络资源&#xff1a;在计算机网络中的链路容量&#xff08;即带宽&#xff09;、交换结点中的缓存和…

windows 10 安装Python 3.10版

一、查找官网 1.python官网需要VPN(建立一个临时的、安全的连接&#xff0c;是一条穿过混乱的公用网络的安全、稳定的隧道。)&#xff0c;打开VPN进行代理之后&#xff0c;打开网址&#xff1a;https://www.python.org/ 二、查找所需下载的系统及版本 1.本机是winodws操作系统&…

计算机网络_ 1.3 网络核心 (数据交换_报文、分组交换)

计算机网络_数据交换_报文、分组交换 报文交换&#xff08;message switching&#xff09;分组交换&#xff08;package switching&#xff09;存储-转发&#xff08;store-and-forward&#xff09;传输延迟分组交换的报文交付时间 分组交换 vs 电路交换 报文交换&#xff08;m…

zabbix监控部署(都是导图!)

目录 一&#xff1a;监控软件的作用 二&#xff1a;zabbix 简介 1、zabbix 概述 2、zabbix 监控原理 3、 Zabbix 6.0 新特性 &#xff08;1&#xff09;Zabbix server高可用防止硬件故障或计划维护期的停机 &#xff08;2&#xff09;Zabbix 6.0 LTS新增Kubernetes监控功…

C语言入门篇(二)

前言   续接上一篇文章&#xff0c;此篇继续对&#xff23;语言的基础知识点进行更新。 C语言入门篇&#xff08;一&#xff09; 初始C语言 7. 选择语句8. 循环语句9. 函数9.1 函数的定义9.2 函数的调用 10. 数组10.1 数组定义10.2 数组的下标10.3 数组的使用 11. 操作符12.…

JAVA学习(九)

1.java锁 1.1 AtomicInteger 首先说明&#xff0c;此处 AtomicInteger&#xff0c;一个提供原子操作的 Integer 的类&#xff0c;常见的还有 AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference 等&#xff0c;他们的实现原理相同&#xff0c; 区别在与运算对象类型…

搭建新版security-oauth2协议,流程代码详解,源码分析

前言&#xff1a;最近在学习搭建oauth2协议的开放平台&#xff0c;把搭建框架时的思路以及遇到的问题记录下来。 文章会持续更新&#xff0c;前期可能会比较零碎&#xff0c;最后会整合一起&#xff0c;写一篇从部署到使用、踩坑、依赖版本解决等完整文章。 使用的是Spring S…

【深度学习】深度强化学习初学者指南

一、说明 GAN&#xff08;Generative Adversarial Networks&#xff09;是一种深度学习模型&#xff0c;它由两个神经网络组成&#xff1a;一个生成网络和一个判别网络。生成网络学习如何生成类似于给定数据集的新数据&#xff0c;而判别网络则学习如何区分生成网络生成的数据和…

Linux下的基本指令

Linux下的基本指令 操作系统的概念01.adduser指令02.userdel指令03.pwd指令04.ls指令05.tree指令06.cd指令07.touch指令08.mkdir指令&#xff08;重要&#xff09;09.rmdir指针&&rm指令&#xff08;重要&#xff09;10.man指针&#xff08;重要&#xff09;11.cp指令&a…

【macOS 系列】如何调整启动台图标大小和行数

1、使用指令&#xff0c;这是隐藏的技巧&#xff0c;在控制台输入如下指令 defaults write com.apple.dock springboard-rows -int 6 defaults write com.apple.dock springboard-columns -int 8 defaults write com.apple.dock ResetLaunchPad -bool TRUE killall Dock以上表…

基于Web的智慧交通3D可视化系统

前言 城市交通是城市社会活动、经济活动的纽带和动脉&#xff0c;智慧交通系统对城市经济发展和人民生活水平起着极其重要的作用。 背景 随着我国城市化进程不断加快&#xff0c;现代城市交通问题日益受到人们的关注。特别是汽车数量的与日俱增&#xff0c;给城市带来了大量…

Socket介绍及使用Java实现socket通信

一、Socket概述 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口&#xff0c;允许应用程序通过网络进行数据传输&#xff0c;实现不同主机之间的通信。 Socket可以看作是一种抽象的概念&#xff0c;用于描述网络通信…

性能监控软件的软件特色有哪些?

性能监控软件是一种专门用于监测和分析系统性能的软件工具。它可以帮助开发人员、运维人员和系统管理员追踪系统的性能瓶颈&#xff0c;优化系统性能&#xff0c;提供稳定可靠的服务&#xff0c;那性能监控软件的软件特色有哪些&#xff1f; 实时监控&#xff1a;性能监控软件可…

3、CCesium 第一个地图

1、将下载的CCsium库解压到指定目录如D:/install&#xff0c;里面有几个文件 bin&#xff1a;导出的dll examples&#xff1a;一个简单的示例 include&#xff1a;ccesium和第三方库的头文件 lib&#xff1a;搜索cceisum库的一些信息 share&#xff1a;一些说明 我们主要用…