详解vue如何使用rules对表单字段进行校验


Posted in Javascript onOctober 17, 2018

1、在代码中,添加属性::rule

<Form ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit" class="form-con">
            <FormItem prop="phone">
              <Input v-model="form.phone" prefix="md-person" placeholder="请输入您的手机号" size="large" class="login-form-input" :maxlength="11"></Input>
            </FormItem>
            <FormItem prop="password">
              <Input type="password" v-model="form.password" prefix="md-lock" placeholder="请输入您的密码" size="large" class="login-form-input" :maxlength="100"></Input>
            </FormItem>
            <FormItem prop="code">
              <Input v-model="form.code" placeholder="请输入验证码" prefix="ios-barcode" size="large" class="login-form-input" :maxlength="4"></Input>
              <img @click="refLoginImg" :src="loginImgSrc" class="login-img"/>
            </FormItem>
            <FormItem>
              <Button @click="handleSubmit" :loading="submitLoading" type="info" long size="large" class="login-btn" icon="md-log-in">
                <span v-if="!submitLoading">立即登录</span>
                <span v-else>正在登录,请稍候...</span>
              </Button>
            </FormItem>
          </Form>

2.新建一个文件(validate.js)定义验证规则

/** 这个文件只允许放表单验证方法 **/

//验证手机号
export function isPhone(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  var pattern = /^1[34578]\d{9}$/
  if(pattern.test(value)){
    return callback()
  }
  return callback(new Error('输入的手机号错误'))
}

3、在页面(xx.vue)中引入验证规则定义的文件,并在export default中定义rule规则,使用语法:{validator:验证方法,trigger:验证触发} validator

rules: {
          phone: [
            { required: true, message: '手机号不能为空', trigger: 'blur' },
            { type: 'string', min: 11, message: '手机号不允许小于11位', trigger: 'blur' },
            { validator: isPhone, trigger: 'blur' },
          ],
          password: [
            { required: true, message: '密码不能为空', trigger: 'blur' },
            { type: 'string', min: 6, message: '密码不允许小于6位', trigger: 'blur' },
          ],
          code: [
            { required: true, message: '验证码不能为空', trigger: 'blur' },
            { type: 'string', min: 4, message: '验证码必须是4位', trigger: 'blur' },
          ],
        },

以下是validator.js文件的部分验证方法

/* 是否是公司邮箱*/
export function isWscnEmail(str) {
 const reg = /^[a-z0-9](?:[-_.+]?[a-z0-9]+)*@wallstreetcn\.com$/i;
 return reg.test(str.trim());
}

/* 合法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 isInteger(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入正整数'));
  } else {
   const re = /^[0-9]*[1-9][0-9]*$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入正整数'));
   } else {
    callback();
   }
  }
 }, 1000);
}


// 验证是否是[0-1]的小数
export function isDecimal(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入数字'));
  } else {
   if (value < 0 || value > 1) {
    callback(new Error('请输入[0,1]之间的数字'));
   } else {
    callback();
   }
  }
 }, 1000);
}

// 验证端口是否在[0,65535]之间
export function isPort(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (value == '' || typeof(value) == undefined) {
   callback(new Error('请输入端口值'));
  } else {
   const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入在[0-65535]之间的端口值'));
   } else {
    callback();
   }
  }
 }, 1000);
}

/* 小写字母*/
export function validateLowerCase(str) {
 const reg = /^[a-z]+$/;
 return reg.test(str);
}

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

Javascript 相关文章推荐
在textarea中显示html页面的javascript代码
Apr 20 Javascript
Mootools 1.2教程 Tooltips
Sep 15 Javascript
js有关元素内容操作小结
Dec 20 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 Javascript
jQuery表单验证简单示例
Oct 17 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
关于webuploader插件使用过程遇到的小问题
Nov 07 Javascript
node简单实现一个更改头像功能的示例
Dec 29 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 Javascript
Vue绑定内联样式问题
Oct 17 #Javascript
react 应用多入口配置及实践总结
Oct 17 #Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
Oct 17 #Javascript
手把手教你写一个微信小程序(推荐)
Oct 17 #Javascript
微信小程序开发之tabbar图标和颜色的实现
Oct 17 #Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 #Javascript
vue实现循环切换动画
Oct 17 #Javascript
You might like
使用PHP实现Mysql读写分离
2013/06/28 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
实现PHP搜索加分页
2016/10/12 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
javascript时间函数大全
2014/06/30 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python中django学习心得
2017/12/06 Python
python实现验证码识别功能
2018/06/07 Python
python hook监听事件详解
2018/10/25 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
新闻编辑自荐书范文
2014/02/12 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
2014年班组工作总结
2014/11/20 职场文书
民事和解协议书格式
2014/11/29 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android