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

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<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)定义验证规则

?


1

2

3

4

5

6

7

8

9

10

11

12

13

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

//验证手机号

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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文件的部分验证方法

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

/* 是否是公司邮箱*/

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);

}

 
后盾网VIP实战教程之仿京东网系列视频教程 共35讲(含源码) 
捷训网Node.js基础入门培训12篇 Node.js基础入门学习视频教程 
web前端框架bootstrap高清视频教程附代码讲义 17课 
后盾网土特产商城前端实战教程46讲(含源码)
企业门户前端实战(含源码)教程 
前端开发项目:一起来做秒杀活动 
web前端js渐进式显示框架vue.js实战高清视频教程附代码讲义 11课 
Node.JS之“个人博客开发实战教程”附代码讲义 26课 
Vue.js + Node.js实现音乐播放器实战案例
The Vast World of Vue.js[英文版Vue.js教程]
英文版Learning Vuejs
vue.js实战项目:Vue入门到实战图书管理
张容铭js高级课程vue.js实战项目:团购网 
Vue2.0从入门到项目实战:电商项目 
VueJs基础入门详解:45节课
最新Web界面库vue.js视频教程
vue.js实战项目:美团外卖平台  ...2
智能社vue.js精讲视频教程
麦子学院Vuejs详解31课 
Bootstrap入门实战网站后台管理教程 

原文地址:https://www.cnblogs.com/winifredaf/p/10012890.html

时间: 2024-10-03 20:45:49

详解vue如何使用rules对表单字段进行校验的相关文章

详解vue 路由跳转四种方式 (带参数)

详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1.  router-link ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1. 不带参数  <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name /

详解Vue中的nextTick

Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一.示例 先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用. //模板 <div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if="msg1

【Vue】详解Vue生命周期

Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之间,进行数据观测(data observer) ,也就是在这个时候开始监控data中的数据变化了,同时初始化事件 created钩子函数和beforeMount间的生命周期 对于created钩子函数和beforeMount间可能会让人感到有些迷惑,下面我就来解释一下: el选项的有无对生命周期过程

详解-vue项目中的文件和目录

可以用vue-cli来支持一个项目. 建议使用npm 3+更高效的依赖关系树: $ npm install -g vue-cli $ vue init webpack my-project $ cd my-project $ npm install $ npm run dev 项目结构: . ├── build/ # webpack配置文件 │ └── ... ├── config/ │ ├── index.js # 主要项目配置 │ └── ... ├── src/ │ ├── main.js

详解Vue生命周期---1

目录 Vue实例的生命周期全过程(图) 在beforeCreate和created钩子函数间的生命周期 created钩子函数和beforeMount间的生命周期 el选项的有无对生命周期过程的影响 template参数选项的有无对生命周期的影响 Vue的编译过程——把模板编译成 render 函数 beforeMount和mounted钩子函数间的生命周期 beforeUpdate钩子函数和updated钩子函数间的生命周期 beforeDestroy和destroyed钩子函数间的生命周期

【Vue】详解Vue组件系统

Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用 通过Vue.component()去注册一个组件,你就可以全局地使用它了,具体体现在每个被new的 Vue 实例/注册组件, 的template选项属性或者对应的DOM模板中,去直接使用 注册组件 全局注册 例如,放在通过new创建的Vue实例当中: Vue.component('my-component', { template:

实例化vue发生了什么(详解vue生命周期)

const app = new Vue({ el:"#app', data:{ message:'hello,lifePeriod' }, methods:{ init(){ console.log('这是一个方法!') } } }) 触发 beforeCreate 钩子函数 组件实例刚被创建,此时无法访问到 el 属性和 data 属性等.. beforeCreate(){ console.log(`元素:${this.$el}`) //undefined console.log(`属性mes

详解vue父组件传递props异步数据到子组件的问题

案例一 父组件parent.vue // asyncData为异步获取的数据,想传递给子组件使用 <template> <div> 父组件 <child :child-data="asyncData"></child> </div> </template> <script> import child from './child' export default { data: () => ({ as

详解Vue Elementui中的Tag与页面其它元素相互交互的两三事

前言 公司系统在用elementui做后台开发,不免遇到一些需要自己去根据原有的功能上,加一些交互的功能.今天来介绍下我在用elementUi里的Tag标签与多选框交互的过程,东西听上去很简单,但就是越简单的东西越容易出一些问题.官方tag文档:elementUi-tag标签 效果图: 前端精品教程:百度网盘下载 思路 一.多选框勾选,出现对应的tag: 1.利用watch监听多选框绑定的值A(数组)的变化:2.根据A的变化,循环拿到勾选多选框的id对应的name,将id以及对应的name组成新