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

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

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

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

html部分:

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

下面是js部分:

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

接下来是调用:

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

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

依旧直接上例子:

html部分:

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

js部分:

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

三:原生js form表单校验:

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

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

继续简单明了举例子:

html部分:

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

js部分:

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

    题面: Problem F. Teleportation Input file: standard input Output file: standard output Time limit: 15 se ...

  2. Bug调试专项练习三笔记

    前言:大家需要将文件夹中"有问题的代码" 导入到自己的工作空间中一. 训练一: 正确效果:首先要求大家导入给大家的项目, 给项目的"虚拟路径" 设定为" ...

  3. MySQL基础知识:MySQL Connection和Session

    在connection的生命里,会一直有一个user thread(以及user thread对应的THD)陪伴它. Connection和Session概念 来自Stackoverflow的一个回答 ...

  4. css行高

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  5. 导出目录的JS代码,与目录的三级标题测试

    二级标题 三级标题 三级标题 三级标题 三级标题 三级标题 二级标题 三级标题 三级标题 三级标题 三级标题 三级标题 这里是现在页尾目录功能的代码源码: <!-- 目录索引列表生成 --> ...

  6. 学会使用 Mysql show processlist 排查问题

    mysql show full processlist 查看当前线程处理情况 事发现场 每次执行看到的结果应该都有变化,因为是实时的,所以我定义为:"事发现场",每次执行就相当于现 ...

  7. 运维趋势2019年总结,运维就是要做到"技多不压身"

    2019年 在互联网这个行业中对运维的要求越来越来越高,比如2015.16年的时候,运维只是做一些人力投入的事情,比如重启个服务,搭建一个nginx,mysql主从服务,简单的优化一下,就可以上线了, ...

  8. 使用ffmpeg 操作音频文件前后部分静音移除.

    指令特别简单, 但是却琢磨了一下午. 总结看文档时要细心, 主要ffmpeg的版本要 8.2.1 以上 ffmpeg -i in.mp3 -af silenceremove=start_periods ...

  9. shell算数和逻辑运算

    算术运算 Shell允许在某些情况下对算术表达式进行求值,比如:let和declare 内置命令,(( ))复合命令和算术扩 展.求值以固定宽度的整数进行,不检查溢出,尽管除以0 被困并标记为错误.运 ...

  10. 拇指记者深入Android公司,打探事件分发机制背后的秘密

    前言 聊到事件分发,很多朋友就会想到view的dispatchTouchEvent,其实在此之前,Android还做了很多工作. 比如跨进程获取输入事件的方式?在dispatchTouchEvent责 ...