vue实现表单验证功能

本篇主要讲述如何基于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标签内。

需要注意的是:

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

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

(0)

相关推荐

  • Vue快速实现通用表单验证功能

    本文开篇第一句话,想引用鲁迅先生<祝福>里的一句话,那便是:"我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单".这句话要从哪里说起呢?大概要从最近半个月的"全栈工程师"说起.项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载.博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用了Vue,依然需要通过jQuery去操作DOM.其次,只有

  • vue+element-ui集成随机验证码+用户名+密码的form表单验证功能

    在登入页面,我们往往需要通过输入验证码才能进行登入,那我们下面就详讲一下在vue项目中如何配合element-ui实现这个功能 第一步:自定义一个生产随机验证码的组件,其本质是使用canvas绘制,详细代码如下: <template> <div class="s-canvas"> <canvas id="s-canvas" :width="contentWidth" :height="contentHeig

  • Vue ElementUI之Form表单验证遇到的问题

    首先说一下 我在form表单里面遇见的坑: 1.例如我要给后台传的不是对象,而是一个数组,怎么写验证? 2.比如我有四个弹出框,都要做验证,这个时候就要注意了,每一个弹出框的ref都不能给的一样,并且一定要与当前弹框的确定或者保存按钮一一对应,例如:第一个弹框的ref='number',按钮的click比如为xxxxxx('number'),第二个弹出框的ref='number2',对应的按钮>>xxxxxx('number2').如果ref用的都一样,就会出现,点击下一步我没有去做验证,我再

  • vue-form表单验证是否为空值的实例详解

    重点部分:点击表单的 submit按钮 触发form 部分 @submit="submit"事件: submit事件 定义在js部分: prevent:文档上说了在事件后面加上 .prevent就可以阻止默认事件了. form @submit.prevent="submit" <form @submit.prevent="submit"> <input type="text" v-model="us

  • vue中使用element-ui进行表单验证的实例代码

    element-ui 中验证 一.简单逻辑验证(直接使用rules) 实现思路 •html中给el-form增加 :rules="rules" •html中在el-form-item 中增加属性 prop="名称" •js中直接在data中定义rules:{} •html部分 <el-form ref="form" :rules="rules" :model="form" label-width=&q

  • Vue表单验证插件Vue Validator使用方法详解

    Vue-validator 是Vue的表单验证插件,供大家参考,具体内容如下 Vue版本: 1.0.24 Vue-validator版本: 2.1.3 基本使用 <div id="app"> <validator name="validation"> <form novalidate> <div class="username-field"> <label for="username

  • 解决vue+ element ui 表单验证有值但验证失败问题

    一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item label="数据模板" prop="template" > <el-col :span="20"> <el-input type="textarea" v-model="form.template

  • vue表单验证你真的会了吗?vue表单验证(form)validate

    前言 很久没有写文章了,学习了一下webpack,基础的一些组件,今天带来form表单验证组件(element.iviewui)的一期教程(作为一个菜鸡毕竟经历众多项目可以给一些新手一点提示 (QQ群技术讨论)838293023备注(github进来的 github 技术文档技术文档会持续更新 效果图 1.原理解释 考虑 我们看一下我们可以用form去整体触发校验也可以单个input来触发form-item 进行校验 童鞋们现在可能感觉还是没懂,没关系继续往下看. 2.派发和广播 为什么要用广播

  • element 结合vue 在表单验证时有值却提示错误的解决办法

    绑定的值与规则指定的值一定要相同------- 第一步: <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> 加上rules ref 第二部: <el-form-item label="活动名称" prop="na

  • vue elementui form表单验证的实现

    最近我们公司将前端框架由easyui 改为 vue+elementui .自学vue两周 就开始了爬坑之路.业余时间给大家分享一下心得,技术新手加上第一次分享(小激动),有什么不足的地方欢迎大家指正,多多交流才能共同进步! 1.问题 我们公司的项目比较大 表格 表单的页面都不胜数 ,基于此封装了一些 可复用的代码. 2.分析  vue给了我们不一样的前端代码体验  element ui 给我们一套功能强大的组件 减少了我们大量的开发时间 .双剑合璧 天下无敌!  但每个公司的代码风格不同  用户

随机推荐