首页 > 其他分享 >vue实现表单验证功能

vue实现表单验证功能

时间:2022-09-07 10:25:25浏览次数:65  
标签:vue const str 验证 rules value 表单 callback item

https://www.yht7.com/news/156187

vue实现表单验证功能

  •  作者: 佚名     来源: 网络转载
  •  
  •  时间:2021-08-27

本篇主要讲述如何基于NUXT的validate方法实现表单的验证。

将验证方法封装后,使用的时候只需像:rules="filter_rules({required:true,type:"mobile"})"这么一行代码便可在页面中实现验证了。

首先看一下实现效果

一、新建一个validate.js文件:

该文档中放所需的一些验证规则,下面直接看代码:

/**
* Created by jiachenpan on 16/11/18.
**/
 
 
 
export function isvalidUsername (str) {
  const valid_map = ["admin", "editor"]
 return valid_map.indexOf(str.trim()) >= 0
 
}
 
// 非负数
export function noFuNumber (str) {
  const reg = /^d+(.{0,1}d+){0,0}$/ 
 return reg.test(str)
 
}
 
// 手机号
export function isvalidMobile (str) { 
  const reg = /^1(3|4|5|7|8)d{9}$/ 
 return reg.test(str)
 
}
 
// 中文、英文、数字 
export function regexn (str) {
  const reg = /^[u4e00-u9fa5_a-zA-Z0-9]+$/ 
 return reg.test(str)
 
}
 
/* 合法uri */ 
export function validateURL (textval) { 
const urlregex = /^(https?|ftp)://([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+.)*[a-zA-Z0-9-]+.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(/($|[a-zA-Z0-9.,?"+&%$#=~_-]+))*$/ 
return urlregex.test(textval)
 
}
  
 
/* 小写字母 */ 
export function validateLowerCase (str) {
  const reg = /^[a-z]+$/
 return reg.test(str)
 
}
 
  
/* 大写字母 */ 
export function validateUpperCase (str) { 
   const reg = /^[A-Z]+$/ 
 return reg.test(str)
 
}
 
 
/* 大小写字母 */ 
export function validateAlphabets (str) {
  const reg = /^[A-Za-z]+$/
 return reg.test(str)
 
}
 
 
/**
* validate email
* @param email
* @returns {boolean}
*/

二、新建filter_rules.js文件:

该文档放验证的回调函数和验证字段。

附代码:

import { isvalidMobile, regexn, noFuNumber } from "@/utils/validate" 
export default {
install (Vue) {
 
/**
* 注意: 定义type 规则时 不用做非空验证
* 只需要传入 required:true 即可
* */
 
/* 验证非负数 */
 
const isnoFuNumber = (rule, value, callback) => { 
 if (value != null && value !== "") { 
 if (!noFuNumber(value)) { 
  callback(new Error("请输入非负数的数字!")) 
 } else {
 
callback()
 
}
 
} else { 
callback()
 
}
 
}
 
/* 验证手机号 */
const isvalidateMobile = (rule, value, callback) => { 
if (value != null && value !== "") {
if (!isvalidMobile(value)) {
callback(new Error("请输入正确的手机号码!"))
 
  } else {
callback()
}
 
   } else { 
callback()
 
}
 
}
 
/* 含有非法字符(只能输入中文、英文、数字) */ 
const isvalidateRegexn = (rule, value, callback) => { 
if (value != null && value !== "") { 
if (!regexn(value)) { 
callback(new Error("含有非法字符(只能输入中文、英文、数字)!"))
 
} else {
 
callback() 
}
 
} else { 
callback()
 
}
 
}
 
/* 请输入正整数 */
 
// const isvalidateInteger= (rule, value, callback) => { 
// if (value != null && value != "") { 
// if (!integer(value)) { 
// callback(new Error("请输入正整数!")) 
// } else { 
// callback() 
// } 
// } 
// else {
 
// callback(); 
// } 
// }
 
 
 
/**
* 参数 item
* required true 必填项
* maxLength 字符串的最大长度
* min 和 max 必须同时给 min < max type=number
* type 手机号 mobile
* 邮箱 email
* 网址 url
* 各种自定义类型 定义在 src/utils/validate 中 持续添加中.......
* */
 
 
Vue.prototype.filter_rules = function (item) {
let rules = [] 
if (item.required) { 
rules.push({ required: true, message: "该输入项为必填项!", trigger: "blur" })
 
}
 
if (item.maxLength) {
rules.push({ min: 1, max: item.maxLength, message: "最多输入" + item.maxLength + "个字符!", trigger: "blur" })
 
}
 
if (item.min && item.max) {
rules.push({ min: item.min, max: item.max, message: "字符长度在" + item.min + "至" + item.max + "之间!", trigger: "blur" })
 
}
 
if (item.type) { 
let type = item.type
switch (type) {
 
// case "email": 
// rules.push({ type: "email", message: "请输入正确的邮箱地址", trigger: "blur,change" }) 
// break isnoFuNumber
 
case "activeOrder": 
rules.push({ validator: isnoFuNumber, trigger: "blur" }) 
break
 
case "mobile": 
rules.push({ validator: isvalidateMobile, trigger: "blur" }) 
break

case "name": 
rules.push({ validator: isvalidateRegexn, message: "请输入正确的用户姓名", trigger: "blur" })
break
 
case "password": 
rules.push({ validator: isvalidateRegexn, message: "请输入密码", trigger: "blur" }) 
break
 
case "org_name": 
rules.push({ validator: isvalidateRegexn, message: "机构名称不能包含特殊字符", trigger: "blur" }) 
break
 
 
default:
 
rules.push({})
 
break
 
}
 
}
 
 
return rules
 
}
 
}
 
}

三、在页面中引入:

import Validate from "@/utils/filter_rules"

四、在页面中使用验证:

需将验证规则写在el-form-item标签内。

需要注意的是:

这三个地方的名称要书写一致。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

标签:vue,const,str,验证,rules,value,表单,callback,item
From: https://www.cnblogs.com/zhoading/p/16664357.html

相关文章

  • Vue移动端rem适配
    1.新建adaptive.js文件functionadaptive(){//在标准375px适配下,1rem=16px;varbaseFontSize=16varbaseWidth=375varset=function()......
  • Vue学习笔记
    Vue学习笔记书籍Vue.js实战 梁灏著开发工具HBuilderVisualCode扩展插件  在vscode中点击侧边栏中的扩展按钮,然后在出现的搜索栏中输入@installed即......
  • Vue sortable实现排序功能
     1.vue代码 <template><el-table@selection-change="handleSelectionChange"@sort-change="sortChange"v-loading="loading"id="TableColumnID"eleme......
  • 【源码学习】Vue源码的敲门砖(目录结构)
    声明本文是开始学习 Vue 源码的第一篇笔记,当前的版本是 2.6.14 。源码结构目录结构在 github 上下载了源码,是一个叫vue-dev 的文件夹,展开以后 一级目录结构 ......
  • 第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?
    <divid="app"><divv-for="iindataList">{{i}}</div></div>varvm=newVue({el:'#app',data:{dataList:[1,2,3,4,5]}})以上的例......
  • ajax实现发送邮件验证码倒计时功能
    1.实现的效果:   2.前台页面+js1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8">5<title></title>6</head>7......
  • 在UNI-APP创建VUE3项目时配置VUE版本
    在UNI-APP创建项目时,默认是VUE2版本。如果直接使用VUE3代码时会出错。所以第一步就要求设置VUE版本,操作如下:打开根目录下/manifest.json文件,找到“基础配置”-->"Vue......
  • vue3 基础-non-props 特性
    本篇探讨当父组件通过属性给子组件传数据时,子组件如果不通过props属性进行接收,那数据会挂载到哪里,以及子组件如何能使用这些数据.正常的父子组件传值<!DOCTYPEh......
  • vue3项目-小兔鲜儿笔记-商品详情页03和登录页01
    1.封装数量选择组件功能分析:默认值为1可限制最大最小值点击-就是减1,点击+就是加1需要完成v-model的双向数据绑定存在无label的情况<scriptsetup>//......
  • form表单上传文件及后端获取文件
    写在前面(强调)使用form表单上传文件时必须要干的两件事:1.form表单的method指定为post2.指定enctype="multipart/form-data"form表单上传文件<formaction=""method=......