js校验表单插件
来源:互联网 发布:js实现倒计时 编辑:程序博客网 时间:2024/05/21 14:43
本demo使用jQuery,也可以去掉(需要改写里面用的jQuery的方法)。
demo github地址:[https://github.com/graceup/gu_js_lib/tree/master/基于jQuery js检验插件](https://github.com/graceup/gu_js_lib/tree/master/%e5%9f%ba%e4%ba%8ejQuery js%e6%a3%80%e9%aa%8c%e6%8f%92%e4%bb%b6)
插件源代码
/** * 基于jQuery js 检验插件 */GuValidate = new function() { function getFormValue($elem){ var type = $elem.attr("type") || $(this)[0].tagName; if(type == "radio"){ if($elem.is(":checked")){ return $elem.val(); } } else if(type == "checkbox"){ if($elem.is(":checked")){ return $elem.val(); } } else if(type == "ui-rating") { return $elem.rating("getValue"); } else if(type == "ui-switch") { return $elem.uiswitch("getValue"); } else if(type == "dropdown-tree") { return $elem.dropdowntree("getSelectIds"); } else if(type == "filtertag") { return $elem.filtertag("getSelectFilter"); } else { return $elem.val(); } return null; } /** * 传进来一个form对象,将这个form对象的元素转成一个bean,如果包含属性ui-ignore则忽略该表单项 */ this.formToBean = function($form){ var bean = {}; $form.find("input, select, textarea, .ui-rating, .ui-switch, .dropdown-tree, .filtertag").each(function(){ if($(this).is("[ui-ignore]")){ return ; } var name = $(this).attr("name"); var type = $(this).attr("type") || $(this)[0].tagName; if(type == "button" || type == "reset" || type == "submit"){ return ; } var value = getFormValue($(this)); if(value != null){ if(typeof value == 'string'){ value = $.trim(value); } if(type == 'checkbox'){ if(bean[name]){ bean[name] = value; } else { bean[name] += ',' + value; } } else { bean[name] = value; } } }); return bean; }; /** * 绑定表单 */ this.bindForm = function($form, formData) { var checkedValue = 1; $form.find("input,textarea,select,.ui-rating,.ui-switch,.dropdown-tree,.filtertag,img").each(function(){ var name = $(this).attr("name"); var type = $(this).attr("type") || $(this)[0].tagName; if(type == "button" || type == "reset" || type == "submit" || name == ''){ return ; } if(formData[name] == undefined || formData[name] == null){ return ; //formData[name] = ''; } if(type == "radio"){ if($(this).val() == formData[name]){ $(this).prop("checked", true); } } else if(type == "checkbox"){ if(checkedValue == formData[name]){ $(this).prop("checked", true); } } else if(type == "ui-rating") { $(this).rating("setValue", formData[name]); } else if(type == "ui-switch") { $(this).uiswitch("setValue", formData[name]); } else if(type == "dropdown-tree") { //to be implement } else if(type == "filtertag") { } else if(type == 'img'){ $(this).attr("src", formData[name]); } else if($(this).hasClass("select2-offscreen")) { $(this).select2("data", formData[name]); } else { $(this).val(formData[name]); } }); }; var validatePatterns = { "required": [/^[\S+\s*\S+]+$/ig, "不能为空!"], "integer": [/^\d+$/, "必须为整数!"], "numeric": [/^\d+(\.\d+)?$/, "不是合法的数字!"], "currency": [/^\d+\.\d{1,2}$/, "不是合法的货币数字!"], "email": [/^\w+@\w+(\.\w+)*$/, "不合法email输入!"], "phone": [/^[\d|-]+$/, "不合法phone输入!"], "mustChecked": [/0+/g, "checkbox不能为空!"], "mustSelected": [/0+/g, "select不能为空!"], "ipAddress": [/^([1-9]|[1-9]\d|1\d{2}|2[0-1]\d|22[0-3])(\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}$/, "不是有效的IP地址!"], "netport": [/^([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])$/, "不合法端口!"], "mac": [/^[0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}$/, "不合法mac地址!"], "year": [/^(\d{4})$/, "不合法年!"], "mouth": [/^(\d{4})-(0\d{1}|1[0-2])$/, "不合法月!"], "date": [/^{\d}{4}\-{\d}{2}\-{\d}{2}$/, "不合法日!"], "timeHour": [/^(0\d{1}|1\d{1}|2[0-3])$/, "不合法时!"], //HH "timeMinute": [/^(0\d{1}|1\d{1}|2[0-3]):([0-5]\d{1})$/, "不合法分!"], //HH:mm "timeSeconds": [/^(0\d{1}|1\d{1}|2[0-3]):[0-5]\d{1}:([0-5]\d{1})$/, "不合法时间!"], //HH:mm:ss "chineseOnly": [/[^\u4E00-\u9FA5]/g, "输入不合法!请只输入中文!"], "mobilePhone": [/^1[\d]{10}$/, "不合法手机号!"], //"unicomPhone": [/^13[0-4]{1}[\d]{8}$/, "不合法!"], //"telecomPhone": [/^(\d{7,8})|(\d{3,4}\-\d{7,8})$/, "不合法!"], "specials": [/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>?]{1}[^`~!@$%^&+=\\\][\{\}:;'\,<>?]{0,}$/, "不能输入特殊字符!"], "all": [/^/,""], "pattern": [null, "数据不合法!请确认"] }; /** * 表单验证 * ui-validate 属性, minlength, maxlength */ this.validateForm = function($form){ var checkAll = true; $form.find("[ui-validate]").each(function(){ var validate = $(this).attr("ui-validate"); var pattern = $(this).attr('ui-pattern'); var objectReg = new RegExp(/\{.*\}/g); var name = $(this).attr("name"); var vtext = $(this).attr("ui-vtext"); var type = $(this).attr("type") || $(this)[0].tagName; if(vtext == undefined || vtext == null || vtext == ''){ vtext = name; } var value = $.trim(getFormValue($(this))); function getPattern(p){ var reg = null; p = $.trim(p); if(p == "pattern") { reg = [eval("/" + pattern + "/i"), validatePatterns["pattern"][1] ]; } else { reg = validatePatterns[p]; } if(reg == null) { var msg = "[" + vtext + "]验证Pattern配置错误:" + p; alert(msg, 'warn'); throw new Error(msg); } return reg; } var pats = null; var allPatterns = ''; if(objectReg.test(validate)){ validate = eval("(" + validate + ")"); if(validate.minlength && !isNaN(validate.minlength)){ if(value.length < validate.minlength){ alert("[" + vtext + "]不能少于" + validate.minlength + "个字符!", "warn"); $(this).focus(); checkAll = false; return false; } } if(validate.maxlength && !isNaN(validate.maxlength)){ if(value.length > validate.maxlength){ alert("[" + vtext + "]不能超过" + validate.maxlength + "个字符!", "warn"); $(this).focus(); checkAll = false; return false; } } pats = validate.pattern.split(","); allPatterns = validate.pattern; } else { pats = validate.split(","); allPatterns = validate; } if(allPatterns != null && allPatterns.indexOf("required") >= 0 || value != '') { for(var i = 0; i < pats.length; i++){ var reg = getPattern(pats[i]); if(!value.match(reg[0]) || (value.match(reg[0])==-1) && type =="SELECT"){ var vinfo = $(this).attr("ui-vinfo"); if(vinfo == undefined || vinfo == null || vinfo == ''){ vinfo = "[" + vtext + "]" + reg[1]; } alert(vinfo, "warn"); $(this).focus(); checkAll = false; return false; } } } }); return checkAll; };};
demo
htm页面(js比较少,直接写到页面了)
<!DOCTYPE html><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge" /><title>定制基于jQuery js检验插件</title></head><body> <div id="form"> <p> <span>姓名</span> <input type="text" ui-validate="{pattern:'required',maxlength: 50}" ui-vtext="姓名" name="username"><font color="red"> *</font> </p> <p> <span>邮箱</span> <input type="text" ui-validate="{pattern:'email,required',maxlength: 50}" ui-vtext="邮箱" name="email"><font color="red"> *</font> </p> <p> <span>ip</span> <input type="text" ui-validate="{pattern:'ipAddress,required'}" ui-vtext="ip" name="ip"><font color="red"> *</font> </p> <p> <span>留言</span> <textarea rows="5" placeholder="请在此留言" type="text" ui-validate="{pattern:'all',maxlength: 250}" ui-vtext="留言" name="content"></textarea> <font color="red"> *</font> </p> <p> <button onclick="getForm()">getForm</button> </p> </div> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript" src="ui-validate.js"></script> <script type="text/javascript"> function getForm() { if (!GuValidate.validateForm($('#form'))) { return; }else{ alert('检验通过'); } var data = GuValidate.formToBean($('#form')); console.log(data); } </script></body></html>
0 0
- js校验表单插件
- jquery表单校验插件
- Validform表单校验插件
- 一个简易的表单校验插件wv.js
- 常用表单校验JS
- JS 表单校验
- 表单校验html+js
- JS校验表单项
- js校验表单数据
- js之表单校验
- 表单校验-validate.js
- jQuery formValidator表单校验插件
- JQuery插件:表单数据校验
- js jquery 常用表单校验
- 表单提交,submit js校验
- # js校验form表单大合集
- 表单实时校验插件——jquery.validateForm.js(v.2.0)
- 使用jquery.validate.min.js插件进行表单验证并自定义校验规则
- 问题:console.log()的用法
- linux安装jdk
- 20160804-CPP-map
- OpenJDK 1.8的安装,build Android N
- Databinding使用在XML中使用&&
- js校验表单插件
- python pow()和math.pow()函数
- 标签解析和JavaScript的闭包
- linux 下网络设备
- Android 7.0 的改动(持续更新)
- 百度2017暑期实习生编程题单词接龙
- How to solve HornetQ message block (HQ214024) by setting it to paging mode. Jboss EAP 6.1
- caffe下为图像加标签,转换为可执行文件.lmdb格式
- ID3v2 中文文档ver2.3.0