Vue+Element-ui实现表单验证

2023-11-09

效果

校验效果
在这里插入图片描述

template

<div>
    <el-form ref="userFormRef" :model="userForm" :rules="userFormRule" label-width="100px"
             :status-icon="true"
    >
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="姓名:" prop="name">
            <el-input v-model="userForm.name" placeholder="请输入姓名" clearable />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-col :span="12">
            <el-form-item label="年龄:" prop="age">
              <el-input v-model.number="userForm.age" onkeyup="value=value.replace(/[^\d]+/g,'')" placeholder="请输入年龄" clearable />
            </el-form-item>
          </el-col>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="电话:" prop="phone">
            <el-input v-model="userForm.phone" placeholder="请输入手机号码" clearable />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="邮箱:" prop="email">
            <el-input v-model="userForm.email" placeholder="请输入邮箱" clearable />
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="入学时间:" required>
        <el-col :span="11">
          <el-form-item prop="date">
            <el-date-picker v-model="userForm.date" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"
                            style="width: 100%;"
            />
          </el-form-item>
        </el-col>
        <el-col :span="2" style="text-align:center">
          -
        </el-col>
        <el-col :span="11">
          <el-form-item prop="time">
            <el-time-picker v-model="userForm.time" placeholder="选择时间" style="width: 100%;" />
          </el-form-item>
        </el-col>
      </el-form-item>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="性别:" prop="gender">
            <el-radio-group v-model="userForm.gender">
              <el-radio label="0"></el-radio>
              <el-radio label="1"></el-radio>
            </el-radio-group>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="体重:" prop="weight">
            <el-input v-model="userForm.weight" oninput="value=value.replace(/[^0-9.]/g,'')"
                      placeholder="请输入体重"
                      clearable
            >
              <template slot="append">
                kg
              </template>
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="状态:" prop="state">
            <el-switch v-model="userForm.state" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="年级:" prop="grade">
            <el-select v-model="userForm.grade" placeholder="选择年级" style="width:100%" clearable>
              <el-option label="一年级" value="one" />
              <el-option label="二年级" value="two" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="出生地区:" prop="district">
            <el-cascader
              v-model="userForm.district"
              :options="options"
              :props="{ expandTrigger: 'hover' }"
              @change="handleChange"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="个人特长:" prop="hobby">
        <el-checkbox-group v-model="userForm.hobby">
          <el-checkbox label="0" name="hobby">
            画画
          </el-checkbox>
          <el-checkbox label="1" name="hobby">
            打篮球
          </el-checkbox>
          <el-checkbox label="2" name="hobby">
            弹琴
          </el-checkbox>
          <el-checkbox label="3" name="hobby">
            毛笔字
          </el-checkbox>
        </el-checkbox-group>
      </el-form-item>

      <el-form-item label="备注:" prop="desc">
        <el-input v-model="userForm.desc" placeholder="请填写备注" type="textarea" maxlength="50"
                  show-word-limit :rows="4"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm()">
          提交
        </el-button>
        <el-button @click="resetForm()">
          重置
        </el-button>
      </el-form-item>
    </el-form>
  </div>

js实现

data () {
  let cheackMobile = (rule, value, cb) => {
  // 手机号一般最小以“13”开头
    const regMobile = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
    if (regMobile.test(value)) {
      return cb()
    }
    cb(new Error('请输入合法的手机号!'))
  }
  let checkEmail = (rule, value, callback) => {
    const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
    setTimeout(() => {
      if (mailReg.test(value)) {
        callback()
      } else {
        callback(new Error('请输入正确的邮箱格式'))
      }
    }, 100)
  }
  return {
    userForm: {
      name: '',
      age: 0, // 限制输入0和正整数
      phone: '',
      email: '',
      grade: '',
      district: [], // 三级的ID
      weight: '0.00', // 整数或两位小数
      date: '',
      time: '',
      state: false,
      gender: '',
      hobby: [],
      desc: ''
    },
    options: [
      {
        value: '1',
        label: '陕西省',
        children: [
          {
            value: '1-1',
            label: '安康市',
            children: [
              {
                value: '1-1-1',
                label: '汉滨区'
              }, {
                value: '1-1-2',
                label: '石泉'
              }
            ]
          }, {
            value: '1-2',
            label: '西安市',
            children: [
              {
                value: '1-2-1',
                label: '长安区'
              }, {
                value: '1-2-2',
                label: '雁塔区'
              }
            ]
          }
        ]
      }, {
        value: '2',
        label: '河南',
        children: [
          {
            value: '2-1',
            label: '洛阳'
          }, {
            value: '2-2',
            label: '平顶山'
          }
        ]
      }
    ],
    userFormRule: {
      name: [
        { required: true, message: '请输入姓名', trigger: 'blur' },
        { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
      ],
      age: [{ required: true, message: '请输入年龄', trigger: 'blur' }],
      phone: [
        { required: true, message: '电话为必填项,请输入电话!', trigger: 'blur' },
        { validator: cheackMobile, trigger: 'blur' }
      ],
      email: [
        { required: true, message: '邮箱为必填项,请输入邮箱!', trigger: 'blur' },
        { validator: checkEmail, trigger: 'blur' }
      ],
      grade: [{ required: true, message: '请选择年级', trigger: 'change' }],
      district: [{ required: true, message: '请选择出生地区', trigger: 'change' }],
      weight: [
        { required: true, trigger: 'blur', message: '请输入体重' },
        { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '请输入正确的格式,可保留两位小数' }
      ],
      date: [{ required: true, message: '请选择日期', trigger: 'change' }],
      time: [{ required: true, message: '请选择时间', trigger: 'change' }],
      gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
      hobby: [{ type: 'array', required: true, message: '请至少选择一个爱好', trigger: 'change' }],
      desc: [{ required: true, message: '请填写备注', trigger: 'blur' }]
    }
  }
},
methods: {
   // 提交表单
  submitForm () {
    this.$refs['userFormRef'].validate(valid => {
      if (valid) {
        console.log('valid success!!')
        // 可能要向后端提交的数据,这块调用接口
        console.log('userForm', this.userForm)
      } else {
        console.log('valid error!!')
        return false
      }
    })
  },
  
  //重置表单
  resetForm () {
    this.$refs['userFormRef'].resetFields()
  },
  
  // 级联选择器发生变化触发的事件,打印出选中的值
  handleChange (value) {
    // value值最终是一个数组,例如:用户选择‘陕西省->安康市->汉滨区’,则打印出的value值为:['1','1-1','1-1-1']
    console.log(value)
  }
}

校验通过的实现效果

在这里插入图片描述

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

Vue+Element-ui实现表单验证 的相关文章

随机推荐

  • oracle12542,关于客户端报的ORA-12542

    最近用户一个小应用系统总是出故障 windows的系统上跑一个VB写的小客户端程序 出现问题的时候 系统会弹出以下信息 Microsoft ODBC driver for oracle ORA 12542 TNS address alrea
  • GC日志分析

    JVM的GC日志的主要参数包括如下几个 XX PrintGC 输出GC日志 XX PrintGCDetails 输出GC的详细日志 XX PrintGCTimeStamps 输出GC的时间戳 以基准时间的形式 XX PrintGCDateS
  • 阿里云平台接入python版

    物联网基于python云平台的接入 文章目录 物联网基于python云平台的接入 1 设计目的 2 功能要求和关键问题 2 1 系统功能描述 2 2复杂工程问题分析 3 系统整体框架设计 4 模块的设计和实现 4 1 阿里云基础和设计 4
  • 22个开源的PHP框架

    PHP 是一个被广泛使用的来进行Web开发的脚本语言 虽然有很多其它可供选择的Web开发语言 像 ASP 和Ruby 但是PHP是目前为止世界上最为流行的 那么 是什么让PHP如此流行 PHP 如此之流行是因为比起别的语言来 它更容易学习
  • 后端程序员必备:mysql数据库相关流程图/原理图

    前言 整理了一些Mysql数据库相关流程图 原理图 做一下笔记 大家一起学习 1 mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题 了解mysql主从复制原理非常有必要 主从复制原理 简言之 就三步曲 如下 主数据库有
  • DCEL数据结构

    文章目录 前言 DCEL介绍 DCEL优势 DCEL数据结构实现 Point Vertex HalfEdge Face Reference 前言 虽然https blog csdn net baidu 34931359 article de
  • 探索无限可能的教育新领域,景联文教育GPT题库开启智慧教育新时代!

    随着人工智能技术的快速发展 教育领域也将迎来一场革命性的变革 景联文科技是AI基础数据行业的头部企业 近期推出了一款高质量教育GPT题库 景联文科技高质量教育GPT题库采用了先进的自然语言处理技术和深度学习算法 可以实现对各类题目的智能识别
  • UIIAlertController的自动消失

    自动消失的思路就是添加一个计时器 设置计时器的时间 让UIAlertController 通过dismiss消失 UIAlertController alert UIAlertController alertControllerWithTi
  • css知识学习系列(6)-每天10个知识点

    目录 1 CSS中的 box sizing 属性与 border 属性有什么关系 2 在CSS中 如何使用 calc 函数进行计算 有什么使用技巧 3 在CSS中 如何使用 import 引入外部样式表 有哪些注意事项 4 Flexbox和
  • C# 邮件发送

    一 准备工作 1 要想编写一个发送邮件的小工具 首先得了解以下内容 收件人 这封邮件的接收人 邮件发送者沟通交流的对象 抄送 这封邮件的接收人 邮件发送者希望被抄送者了解邮件内容 密件抄送 这封邮件的接收人 与抄送的唯一区别就是它能够让各个
  • flutter 弹窗队列封装,里面的自定义回调值得学习

    参考 里面的这里回调TaskCallback Function学习一下 挺重要的 import dart async 自定义回调类型 typedef TaskCallback void Function bool success dynam
  • 【异常】IDEA打开配置文件*.properties乱码

    一 异常内容 二 异常说明 properties配置文件的编码格式 通常情况下properties的默认编码格式为ISO 8859 1 但是这种文件往往是不可读的 因此需要进行编码格式的转换 三 异常解决 更改properties的编码格式
  • C4996 ‘strncpy‘: This function or variable may be unsafe. Consider using strncpy_s instead. To disa.

    C4996 strncpy This function or variable may be unsafe Consider using strncpy s instead To disa 原因 解决方案 注意事项 原因 strncpy进行
  • 下次造轮子前先看看现有的轮子吧

    转自 http www cppblog com merlinfang archive 2014 12 26 209311 aspx 下次造轮子前先看看现有的轮子吧 值得学习的C语言开源项目 1 Webbench Webbench是一个在li
  • 物理组件oracle,Oracle入门《Oracle介绍》第一章1-1

    1 Oracle 简介 a 对象关系型的数据库管理系统 ORDBMS b 在管理信息系统 企业数据处理 因特网及电子商务等领域使用非常广泛 c 在数据安全性与数据完整性控制方面性能优越 d 跨操作系统 跨硬件平台的数据互操作能力 2 Ora
  • C#中的数组

    C 中的数组 C 数组 Array foreach 索引 null 地址 http www cnblogs com txw1958 archive 2013 01 11 csharp array html 数组概述 数组是一种数据结构 它包
  • VC工程中几中后缀名文件的意义

    opt 工程关于开发环境的参数文件 如工具条位置等信息 aps AppStudio File 资源辅助文件 二进制格式 一般不用去管他 clw ClassWizard信息文件 实际上是INI文件的格式 有兴趣可以 研究 一下 有时候Clas
  • 拜小白教你Qt5.8.0+OpenCV3.2.0配置教程(详细版)

    本机环境 Windows 64位 Qt 5 8 0 OpenCV3 2 0 CMake3 8 2 最后结果 亲测可用 第0部分 前期准备 CMake官网下载地址 https cmake org download CMake安装教程请查看 拜
  • C语言的各类运算概述

    C语言的各类运算概述 C语言的一个很有用的特性就是支持按位布尔运算 位级运算 对char数据类型表达式求值的例子 逻辑运算 逻辑运算符 和 分别对应于命题逻辑中的OR AND和NOT 运算 逻辑运算认为所有非零的参数都表示TRUE 而参数0
  • Vue+Element-ui实现表单验证

    文章目录 效果 template js实现 校验通过的实现效果 效果 校验效果 template div div