表单验证封装,一招学会,永远受用

  身为web开发人员,在开发产品的时候,基本都离不开一大堆的表单前端验证,有比较常见的登录注册的前端验证,还有一些提交信息的表单验证,在判断到书写的格式不正确的时候,告诉用户哪里书写格式填写错误,并且在整个表单只有有一处错误的时候,让提交按钮禁止点击,一方面让整个产品有更好的体验,另一方面也是整个产品开发更加的严谨,近期我就总结了一套表单验证的javaScript,特来给大家分享一下。附上github地址:https://github.com/jiutianxuannan/validator

 1 class Checker {
 2     constructor(regular = {}, nameMap = {}) {
 3         this.regular = regular
 4         this.nameMap = nameMap
 5     }
 6
 7     async check(data) {
 8         for (var key in data) {
 9             await this.validate(data, key)
10         }
11     }
12     async validate(data, key) {
13         let validateRule = this.regular[key]
14         for (const item of validateRule) {
15             let validator = Checker.validators[item]
16             if (validator) {
17                 let value = data[key]
18                 let valid = validator.validateFn(value)
19                 if (!valid) {
20                     let errorPromptInfo = validator.errorPromptInfo.replace(‘$‘, this.nameMap[key])
21                     throw new Error(errorPromptInfo)
22                 }
23             }
24         }
25     }
26     static setValidator(key, validateFn, errorPromptInfo) {
27         Checker.validators[key] = {
28             validateFn,
29             errorPromptInfo
30         }
31     }
32 }
33 Checker.validators = {}
34 export default Checker

使用了一点es6的语法,对于es6不熟的同学可以去看一些文章教程,每个人都是这么过来的,这里不重点介绍,这个checker类有一个重要的方法,就是setValidator方法,从传入的参数上可以看到传入的key,验证方法validateFn,错误提示信息errorPromptinfo,就是创建一系列的验证规则,保存在一个大对象里validators中,具体创建见下面的例子

1 import Checker from ‘./checker.js‘
2 Checker.setValidator(‘require‘, value => value !== undefined, ‘$必须有值‘)
3 Checker.setValidator(‘length‘, value => value && value.length, ‘$不能为空‘)
4 Checker.setValidator(‘phone‘, value => /^1[34578]\d{9}$/.test(value), ‘手机号码不正确‘)

在validator这个大对象中就有每个小对象,每个小对象就是对应一条验证完整信息,比如手机号,输入的Key是phone,验证规则就是value => /^1[34578]\d{9}$/.test(value)这个函数,用填入的手机号的值去执行这个验证方法,如果返回的是false,就提示该对象的错误信息。那具体每个页面的使用见下面的代码。

 1 <template>
 2   <div class="hello">
 3     <form action="">
 4         <div>
 5                 邮箱:<input type="text" v-model="form.email" @input="email => change({email: form.email})">
 6                 <div v-if="errorMsg.email" class="error">{{errorMsg.email}}</div>
 7         </div>
 8         <div>
 9                 手机号: <input type="text" v-model="form.phone" @input="phone => change({phone: form.phone})">
10                 <div v-if="errorMsg.phone" class="error">{{errorMsg.phone}}</div>
11         </div>
12         <button :disabled="!canSumbit">提交</button>
13     </form>
14   </div>
15 </template>
16
17 <script>
18     import Checker from ‘@/utils/checker/index‘
19     const checker = new Checker({
20         email: [‘require‘, ‘email‘],
21         phone: [‘require‘, ‘phone‘]
22     }, {
23         email: ‘邮箱‘,
24         phone: ‘手机号‘
25     })
26     export default {
27         data() {
28             return {
29                 form: {
30                     email: ‘‘,
31                     phone: ‘‘
32                 },
33                 errorMsg: {
34                     email: ‘‘,
35                     phone: ‘‘
36                 }
37             }
38         },
39         computed: {
40             canSumbit() {
41                 return this.form.email && this.form.phone && !this.errorMsg.email && !this.errorMsg.phone
42             }
43         },
44         methods: {
45             async change(data) {
46                 try {
47                     await checker.check(data)
48                     for (var key in data) {
49                         this.$set(this.errorMsg, key, ‘‘)
50                     }
51                 } catch (error) {
52                     for (var key in data) {
53                         this.$set(this.errorMsg, key, error.message)
54                     }
55                 }
56             }
57         }
58     }
59 </script>
60
61 <style scoped>
62     .error {
63         color: #f00;
64     }
65 </style>

由于方便顺手使用了vue,在页面上首先import这个checker,然后造一个对象,传入两个参数对象,一个是每个表单的要求,对应checker中的大对象validator中的验证规则,另一个是对象是作为报错提示相关的,监听表单的输入,将每一个输入对象传入checker中的check方法进行验证,check会就会去调用validator对应的验证对象去做验证,有错误,就将错误信息抛出,页面进行接收,提示用户,将错误信息写入页面错误对象,一旦监听错误对象有值,意味页面还有错误,禁止提交表单

  整个验证的封装不算复杂,能理解透的话,接下来的开发工作就是复制粘贴,极大加快工作效率,完整代码请看我的github地址:https://github.com/jiutianxuannan/validator,希望可以顺手给个star表示鼓励,以后一定开源更多的封装给大家分享。

  

原文地址:https://www.cnblogs.com/jtxn/p/9201729.html

时间: 2024-11-06 09:50:16

表单验证封装,一招学会,永远受用的相关文章

python表单验证封装

在Web程序中往往包含大量的表单验证的工作,如:判断输入是否为空,是否符合规则. <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <link href="{{static_url("commons.css")}}" rel="style

第一百五十三节,封装库--JavaScript,表单验证--备注字数验证

封装库--JavaScript,表单验证--备注字数验证 效果图

JavaScript 之表单验证(表单验证器的封装)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html>     <head>         <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>        

vue+elementui 封装表单验证

其实很简单:步骤1:先用element 把页面写出来:步骤2.规则验证,需要自定义验证的,引入对应的自定义验证方法, 3.封装一个自定义验证的js. 1.先把结构写出来: 注意: from 表单上有model(绑定数据),ref(提交的时有用),rules(对表单的验证规则),这三者缺一不可. 2.代码: <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width

angularjs中的表单验证

angular对html原生的form做了封装,增加了很多验证功能 1.代码结构 <form name="signup_form" novalidate ng-submit="signupForm()"> <div> <label>用户名</label> <input type="text" placeholder="Name" name="name"

群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!

今日周末,改了个表单验证然后无所事事了,然后把昨天群里分享的react的收藏一下尽管现在还在研究angular和nodeJs毕竟刚刚开始用有点不熟...没准以后会研究一下react毕竟看着下面这张图还是觉得有点欢乐的 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,

jq中的表单验证插件------jquery.validate

今天我们来说一下表单验证,有人说我们在进行表单验证的时候使用正则来验证是非常麻烦的,现在我来给大家介绍一下表单验证的插件:jquery.validate.min.js 它是与jquery一起结合用来使用的,使用它是非常方便,只需写校验规则和错误字段即可. 我们常见的校验规则有以下几种: (1)required:true               必输字段(2)email:true                  必须输入正确格式的电子邮件(3)date:true               

Angular表单验证

在使用 AngularJS 进行开发的时候,表单填写是一个很常见的需求,而表单验证又是比较让人头疼的部分,本文对此做一个总结. 在 Angular 的视图中使用的 form 已经不是 HTML 中的普通 form 了,而是一个被 Angular 封装过的指令.它可以完成普通 form 无法实现的功能,比如 form 嵌套,而且自带强大的验证功能. Angular 在对表单进行校验的时候会使用 ngModelController 上的属性,如果不设置 ng-model,则 Angular 无法知道

angular表单验证实例----可用的代码

前段时间,公司做一个单页面,就是一个表单验证,早开始在菜鸟教程上关注了angular,所以下派上用场了 angular里面对于表单验证,设置了很多指令. 也就是说不用自己写一些逻辑,直接绑定指令就行. ng-app     启动你angular的模块 ng-controller 控制器,启动你angualr里面的逻辑代码作用在页面上 ng-options  循环你select里面的option标签,很好用的 ng-submit,表单提交执行的 novalidate  表单form配合后期检测的