最近写了无数各种形式的表单,记录下奇奇怪怪的校验规则~

一:首先是element自带的rules校验规则:

element作为常用框架,自带rules属性简单易懂,官方文档一目了然,不再赘述,应付常用校验足够了,

相对麻烦的是自定义的校验函数,举个例子:

html部分:


 1 <el-form id="form"
2 :rules="rules"
3 :inline="true"
4 :model="form"
5 size="medium"
6 ref="form"
7 label-position="right"
8 label-width="136px"
9 validate-on-rule-change
10 class="postForm" autocomplete="off" inline-message>
11 <el-form-item prop="phone">
12 <el-input v-model="form.phone" name="phone" id="phone" size="medium" required>
13 </el-input>
14 </el-form-item>
15    <el-form-item prop="money">
16 <el-input v-model="form.money" name="money" id="money" size="medium" required>
17 </el-input>
18 </el-form-item>
19 </el-form>

 

下面是js部分:

 1 rules:{
2 phone: [
3 { required: true, message: '请输入手机号码', trigger: 'blur' },
4 { validator:function(rule,value,callback){
5 if(/^1[34578]\d{9}$/.test(value) == false&&/^\d{4}-?\d{4}$/.test(value) == false){
6 callback(new Error("请输入正确的手机号或电话号码"));
7 }else{
8 callback();
9 }
10 }, trigger: 'blur'
11 }
12 ],
13   money: [
14 {required: true, message: '请输入金额', trigger: 'change'},
15 { validator:function(rule,value,callback){
16 let num=Number(me.numRep)+Number(me.meetingForm.numWork)
17 if(/^\d+(\.\d{1,6})?$/.test(value) == false){
18 callback(new Error("最长可输入6位小数点,系统限制最大不能超过 550*总人数/10000"));
19 }else if(Number(value) >num*550/10000){
20 callback(new Error("最长可输入6位小数点,系统限制最大不能超过 550*总人数/10000"));
21 }
22 else{
23 callback();
24 }
25 }, trigger: 'blur'}
26   ]
27 }

接下来是调用:

 1 formValidate(formName){
2 this.$refs[formName].validate((valid) => {
3 if(valid) {
4 this.validateForm=true;
5 }else{
6 this.$message.warning("请确认输入信息无误!");
7 this.validateForm=false;
8 }
9 });
10 return this.validateForm;
11 },

二:接下来也是比较常用的,jQuery+easyUI 的表单校验:

依旧直接上例子:

html部分:

 1 <form id="formA" class="postForm" autocomplete="off">
2 <table role="table" class="desigerTable" data-usage="基本信息录入" id="t5" cellpadding="10" cellspacing="10">
3 <tbody>
4   <tr>
5   <td class="targetarea droppable">
6   <div data-type="1">
7   <div class="form-group">
8   <label class="col-sm-4 control-label">总天数</label>
9    </div>
10   </div>
11   </td>
12   <td class="targetarea droppable">
13   <div data-type="1" class="wrapper">
14   <div class="form-group">
15    <input class="form-control" placeholder="" id="days"
16 name="days" type="text">
17   </div>
18   </div>
19    </td>
20   <td class="targetarea droppable">
21   <div data-type="1">
22   <div class="form-group">
23   <label class="col-sm-4 control-label">总人数</label>
24   </div>
25   </div>
26   </td>
27   <td class="targetarea droppable" colspan="2">
28   <div data-type="1" class="wrapper">
29   <div class="form-group">
30   <input class="form-control" placeholder="" id="person"
31 name="person" type="text">
32   </div>
33   </div>
34   </td>
35   </tr>
36       </tbody>
37       </table>
38 </form>

js部分:

 1 /**
2 * 校验主表单
3 */
4 var formValidate = function () {
5 //表单验证规则
6 $("#formA").validate({
7 ignore: "",
8 rules: {
9 days: {required: false,number: true,checkDur:true},
10 person: {required: false,number: true,checkPerson:true},
11 },
12 messages: {
13 days: {
14 number: "请输入数字",
15 checkDays:"*总天数不超过2天,可输入小数,0.5,1,1.5!"
16 },
17 person: {
18 number: "请输入数字",
19 checkPerson:"*请输入正整数!"
20 },
21 },
22 //是否在获取焦点时验证
23 onfocusout:false,
24 //是否在敲击键盘时验证
25 onkeyup:false,
26 //提交表单后,(第一个)未通过验证的表单获得焦点
27 focusInvalid:true,
28 //当未通过验证的元素获得焦点时,移除错误提示
29 focusCleanup:true,
30 });
31 $.validator.addMethod("checkDays",function(value,element){
32 if(value == 0.5||value == 1||value == 1.5||value == 2){
33 return this.optional(element)||true
34 }
35 },"*总天数不超过2天,可输入小数,0.5,1.5!");
36 $.validator.addMethod("checkPerson",function(value,element){
37 var me = /(^[1-9]\d*$)/;
38 return this.optional(element)||(me.test(value));
39 },"*请输入正整数!");
40 /**
41 * 校验方法调用
42 */
43 var dataValidate = function (data) {
44 if (!$("#formA").valid()) {
45 Util.alert("请输入正确的数据!");
46 return false;
47 }
48 return data;
49 };

三:原生js form表单校验:

  原生js校验可直接调用onclick,onfocus,onblur,onkeyup等事件来实现

  (ps:原生真的永远的神,没有什么是原生js做不到的,如果做不到,就是我太菜了,继续滚去学原生。。)

继续简单明了举例子:

html部分:

 1 <form action="example.html" method="post" enctype="multipart/form-data" class="register">
2 <div>
3 <label for="idCode">身份证号</label>
4 <input type="text" id="idCode" class="idCode" name="idCode" placeholder="身份证号"/>
5 </div>
6 <div>
7 <label for="passwd">密码</label>
8 <input type="passwd" name="passwd" id="passwd" class="passwd" placeholder="密码"/>
9 </div>
10 </form>

js部分:

 1   onload = function () {
2    blurElement();
3    submitForm();
4   }
5   //元素失去焦点时校验
6 function blurElement() {
7 //验证姓名
8 document.getElementById("ame").onblur = function () {
9 vailidateName();
10 };
11
12 //表单提交函数
13 function submitForm() {
14 let form = document.getElementsByClassName("register")[0];
15 form.onsubmit = function (e) {
16 let flag =vailidateName()& vailidatePasswd()& vailidateID();
17 return flag == 1 ? true : false;
18 };
19 }
20 //验证身份证号码 18位
21 function vailidateID() {
22 let id = document.getElementById("idCode");
23 let span = next(id);
24 let value = id.value;
25 //判断空
26 if (value == "") {
27 span.innerHTML = "身份证号码不能为空";
28 span.style.color = "red";
29 return false;
30 }
31 //判断长度
32 if (value.length != 18) {
33 span.innerHTML = "身份证号码长度18位";
34 span.style.color = "red";
35 return false;
36 }
37 //判断前17位数字
38 let reg = /^\d{17}$/;
39 let str = value.substring(0, 17);
40 if (!reg.test(str)) {
41 span.innerHTML = "身份证号码前17位必须是数字";
42 span.style.color = "red";
43 return false;
44 }
45 //验证密码:6-12位非空,必须包含大写字符,字母开头
46 function vailidatePasswd() {
47 let passwd = document.getElementById("passwd");
48 let span = next(passwd);
49 let value = passwd.value;
50 let code = /^[a-zA-Z]$/;
51 //非空
52 if (value == "") {
53 span.innerHTML = "密码不能为空";
54 span.style.color = "red";
55 return false;
56 }
57   }

ok,结束,以上就是最近写的典型的前端校验表单例子,还在跟需求battle新的校验。。接下来都是更让人吐血的动态校验,写完了再更。。。

js--吐血总结最近遇到的变态表单校验---element+原生+jq+easyUI(前端职业生涯见过的最烦的校验)的更多相关文章

  1. js-动态表单校验-吐血总结最近遇到的变态表单校验2---element+原生

    上一部分总结了基础常用的js表单校验,包括原生以及框架,下面来总结这一个月涉及到的动态校验: 动态表单校验大致分为三种情况: 1. 首先是固定校验规则,但是表单组件是动态生成的,例如:在表单或者表格里 ...

  2. Atitit vue.js 把ajax数据 绑定到form表单

    Atitit vue.js 把ajax数据 绑定到form表单 1.1. 使用场景:主要应用在编辑与提交场合..1 1.2. 绑定数据到form控件,可以使用jquery,不过vue.js更加简单1 ...

  3. js进阶 9-6 js如何通过name访问指定指定表单控件

    js进阶 9-6 js如何通过name访问指定指定表单控件 一.总结 一句话总结:form中控件的三种访问方式:2formElement 1document 1.form中控件的三种访问方式? 1.f ...

  4. Angular JS 中的内置方法之表单验证

    angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用

  5. js动态的往表格中加入表单元素

    效果如图: 这里我用的是layui的静态表格,其他框架也是一样的(只要你都表单元素要通过js进行渲染),我的需求是在表单中放了表格的元素,表格中还有表单的元素.表格中的行数据是js动态添加的,正常的添 ...

  6. 表单验证--通过原生js模仿ajax的异步交互

    今天给大家带来个福利,我也是刚刚学习的很实用的一个东西,通过原生js模仿ajax的异步交互. 我的博客只是给那些新手看的大神勿喷,写的不好可留言,请指出. 因为当初自己学的时候一个问题不会找人问,知道 ...

  7. JS采用ActiveXObject实现用户在提交表单时屏蔽敏感词的功能

    本例中敏感词ciku.txt放在C盘根目录下,采用的ActiveXObject插件获取本地文件内容.使用此插件不需网上下插件,直接用如下js代码即可. 浏览器需修改interner安全选项的级别,启用 ...

  8. JS常见操作,日期操作,字符串操作,表单验证等

    复制代码 //第一篇博文,希望大家多多支持 /***** BasePage.js 公共的 脚本文件 部分方法需引用jquery库 *****/ //#region 日期操作 //字符串转化为时间. f ...

  9. Node.js学习笔记(2)--提交表单

    说明(2017-5-2 11:42:33): 1. index.html <!DOCTYPE html> <html lang="en"> <head ...

随机推荐

  1. Python-jet后台管理的使用

    python-django-jet库的使用 1.安装 pip install django-jet 2.配置 将'jet'应用添加到你的Django项目的设置文件settings.py中的INSTAL ...

  2. Github 1.9K Star的数据治理框架-Amundsen

    Amundsen的使命,整理有关数据的所有信息,并使其具有普遍适用性. 这是Amundsen官网的一句话,对于元数据的管理工作,复杂且繁琐.可用的工具很多各有千秋,数据血缘做的较好的应该是Apache ...

  3. Git - 使用命令和P4Merge进行diff

    P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具). 下载地址: https://www.perforce.com/downloads/visual-me ...

  4. JS中EventLoop、宏任务与微任务的个人理解

    为什么要EventLoop? JS 作为浏览器脚本语言,为了避免复杂的同步问题(例如用户操作事件以及操作DOM),这就决定了被设计成单线程语言,而且也将会一直保持是单线程的.而在单线程中若是遇到了耗时 ...

  5. SyntaxError :invalid syntax Python常见错误

    1.忘记在 if , elif , else , for , while , class ,def 声明末尾添加 ":" 2.使用 = 而不是 ==,= 是赋值操作符而 == 是等 ...

  6. python工业互联网应用实战11—客户端UI

    这个章节我们将演示用户端界面的开发,当前演示界面还是采用先实现基本功能再逐步完善的"敏捷"模式.首先聚焦在功能逻辑方面实现普通用户与系统的交互,普通用户通过url能查看到当前任务的 ...

  7. gitee 学习笔记

    这个流程只能是在自己的测试仓库中联系哟 首先创建一个自己的仓库 接下来安装git客户端,通过gitee官网给了一个例子创建ssh密钥 然后输入命令 get clone 你仓库的https 或者ssh地 ...

  8. Spring Security OAuth2 实现登录互踢

    背景说明 一个账号只能一处登录,类似的业务需求在现有后管类系统是非常常见的. 但在原有的 spring security oauth2 令牌方法流程(所谓的登录)无法满足类似的需求. 我们先来看 To ...

  9. 【CTF】图片隐写术 · 盲水印

    前言 盲水印同样是CTF Misc中极小的一个知识点,刚刚做到一题涉及到这个考点的题目. 感觉还挺有意思的,就顺便去了解了下盲水印技术. 数字水印 数字水印(Digital Watermark)一种应 ...

  10. buuctf --pwn part2

    pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...