验证的js代码
/// <reference path="jquery-1.7.1.min.js" /> (function ($) { var FormValidator = function () { this.regexEnum = { idCard: /^[1-9]([0-9]{14}|[0-9]{16})([0-9]|X)$/, num: /^\-?([1-9]\d*)$/, //数字 email: /^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/, phone: /^1[3|4|5|8]\d{9}$/, chinese: /^[\u0391-\uFFE5]{2,6}$/, //2-6位中文 password: /^[a-zA-Z0-9_]{8,32}$/ //6-32位密码验证 }; this.validatorArr = {}; }; FormValidator.prototype.requred = function (el) { // if (el.val() == '') { // return false; // } return true; } FormValidator.prototype.init = function () { var scope = this; $('.formValidate').each(function () { var el = $(this); scope.initItem(el); }); //each }; FormValidator.prototype.initItem = function (el) { if (typeof el == 'string') el = $('#' + el); var scope = this; var cfg = el.attr('data-cfg'); if (cfg && cfg.length > 0) { cfg = eval('(' + cfg + ')'); // cfg = JSON.parse(cfg); var check = cfg.check || true, id = el.attr('id') || new Date().getTime(), initMsg = cfg.initMsg || '请填入信息', sucMsg = cfg.sucMsg || '格式正确', errorMsg = cfg.errorMsg || '请注意格式', requred = cfg.requred || false, msgPosition = cfg.msgPosition || 'right'; cfg.id = id; cfg.check = check; cfg.initMsg = initMsg; cfg.sucMsg = sucMsg; cfg.errorMsg = errorMsg; cfg.msgPosition = msgPosition; cfg.requred = requred; var tips = $('<div class="validateTips validateInit" id="' + id + 'Tips"><div class="triangle_icon"><div class="before"></div><div class="after"></div></div>' + initMsg + '</div>'); // var tips = $('<div class="validateTips validateInit" id="' + id + 'Tips">' + initMsg + '</div>'); var offset = el.offset(); var height = parseInt(el.outerHeight()); var width = parseInt(el.outerWidth()); var l = offset.left; var t = offset.top; if (msgPosition == 'bottom') { tips.addClass('posBottom'); t += height + 4; } else if (msgPosition == 'right') { tips.addClass('posRight'); l += width + 6; } else if (msgPosition == 'top') { tips.addClass('posTop'); t += height * (-1) - 8; } tips.css({ left: l, top: t }); $('body').append(tips); cfg.el = el; cfg.tipEl = tips; //该表单的验证 cfg.validate = function () { scope.funcValidate(el, cfg); }; //会触发验证的事件(取消验证后,该事件取消的话害怕引起事件丢失) el.change(function () { scope.funcValidate(el, cfg); }); el.focus(function () { scope.funcValidate(el, cfg); }); el.blur(function () { scope.funcValidate(el, cfg); }); el.keyup(function () { scope.funcValidate(el, cfg); }); el.keydown(function () { scope.funcValidate(el, cfg); }); scope.validatorArr[id] = cfg; //生成相关验证对象 } else { console.log('请输入完整验证信息!否则控件会产生错误!'); } }; FormValidator.prototype.funcValidate = function (el, cfg) { var id = cfg.id; var check = cfg.check; //判断是否开启验证 //取消事件不执行下面逻辑 if (!this.validatorArr[id]) return false; //若是没有开启验证便忽略之 if (!check) { this.validatorArr[id]['state'] = 'ignore'; return false; } var type = cfg.type; var regexObj = cfg.regexObj; //正则相关 var rangeObj = cfg.rangeObj; //范围验证 var compareObj = cfg.compareObj; //范围验证 var msg = ''; var isPass = 1; //1成功,-1错误 //首先进行非空验证 if (cfg.requred) { if (el.val() == '') { isPass = -1; msg = '该项必填'; } } //type优先 if (isPass == 1 && el.val().length > 0 && typeof type == 'string') { var typeArr = type.split('|'); //可能包含验证组 var errorArr = cfg.errorMsg.split('|'); //各个组错误时候对应的信息 for (var i = 0, len = typeArr.length; i < len; i++) { var r = this.regexEnum[typeArr[i]]; //测试通过 if (r.test(el.val())) { msg = cfg.sucMsg; } else { isPass = -1; msg = errorArr[i] ? errorArr[i] : cfg.errorMsg; break; //一旦有错误的地方便中断 } } } //当第一步验证通过便执行自身正则验证 if (isPass == 1 && el.val().length > 0 && regexObj) { //当未指定type时候,便执行页面中的正则表达式对象 var r = regexObj; if (r.test(el.val())) { msg = cfg.sucMsg; } else { isPass = -1; msg = cfg.errorMsg; } } //当第二步验证通过便执行范围验证 if (isPass == 1 && el.val().length > 0 && rangeObj) { //日期验证暂时忽略 var rangeArr = rangeObj.split('|'); if (rangeArr.length == 3) { var _v = el.val(); var _p1 = rangeArr[1]; var _p2 = rangeArr[2]; if (rangeArr[0] == 'num') { _v = parseInt(el.val()); _p1 = parseInt(rangeArr[1]); _p2 = parseInt(rangeArr[2]); } if (_v > _p1 && _v < _p2) { msg = cfg.sucMsg; } else { isPass = -1; msg = '请填入' + rangeArr[0] + '到' + rangeArr[1] + '直接的数字'; } } else { console.log('范围参数错误'); } } //执行对比运算 if (isPass == 1 && el.val().length > 0 && compareObj) { var compareArr = compareObj.split('|'); if (compareArr.length == 3) { var _type = compareArr[0] var _id = compareArr[1]; var _flag = compareArr[2]; var _v = el.val(); var _cv = $('#' + _id).val(); if (_type == 'num') { _v = parseInt(_v); _cv = parseInt(_cv); } if (_flag == '<') { if (_v < _cv) { msg = cfg.sucMsg; } else { isPass = -1; msg = '该值过大'; } } if (_flag == '>') { if (_v > _cv) { msg = cfg.sucMsg; } else { isPass = -1; msg = '该值过小'; } } if (_flag == '=') { if (_v == _cv) { msg = cfg.sucMsg; } else { isPass = -1; msg = '两次数据不一致'; } } } else { console.log('范围参数错误'); } } if (msg == '') isPass = 0; if (isPass == 0) { this.validatorArr[id]['state'] = 'init'; this.validatorArr[id]['tipEl'].removeClass('validateError'); this.validatorArr[id]['tipEl'].removeClass('validateSuc'); this.validatorArr[id]['tipEl'].addClass('validateInit'); this.validatorArr[id]['tipEl'].html('<div class="triangle_icon"><div class="before"></div><div class="after"></div></div>' + cfg.initMsg); } else if (isPass == 1) { this.validatorArr[id]['state'] = 'success'; this.validatorArr[id]['tipEl'].removeClass('validateError'); this.validatorArr[id]['tipEl'].removeClass('validateInit'); this.validatorArr[id]['tipEl'].addClass('validateSuc'); this.validatorArr[id]['tipEl'].html('<div class="triangle_icon"><div class="before"></div><div class="after"></div></div>' + msg); } else if (isPass == -1) { this.validatorArr[id]['state'] = 'error'; this.validatorArr[id]['tipEl'].removeClass('validateSuc'); this.validatorArr[id]['tipEl'].removeClass('validateInit'); this.validatorArr[id]['tipEl'].addClass('validateError'); this.validatorArr[id]['tipEl'].html('<div class="triangle_icon"><div class="before"></div><div class="after"></div></div>' + msg); } }; FormValidator.prototype.validatorAll = function () { for (var k in this.validatorArr) { var v = this.validatorArr[k]; v.validate(); } }; FormValidator.prototype.removeValidator = function (id) { if (id && this.validatorArr[id]) { this.validatorArr[id].tipEl.remove(); //删除提示信息 this.validatorArr[id]['check'] = false; //将其验证状态置为false var s = ''; } }; FormValidator.prototype.addValidator = function (id) { var el = $('#' + id); this.initItem(el); }; FormValidator.prototype.validatorState = function () { for (var k in this.validatorArr) { var v = this.validatorArr[k]; if (v.state == 'error') { return false; } } return true; }; window.FormValidator = FormValidator; })(jQuery); View Code
与之对应的 HTML代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <style type="text/css"> .form div { height: 30px; line-height: 30px; margin: 5px; } .validateTips { min-width: 100px; border-radius: 2px; padding: 5px 10px; z-index: 500; position: absolute; font-size: 12px; } .validateInit { background: #FFFFE0; border: 1px solid #F7CE39; } .validateError { background: orange; border: 1px solid red; } .validateSuc { background: #79D62D; border: 1px solid Green; } .triangle_icon { position: absolute; } .triangle_icon div { border-style: solid; border-width: 6px; position: absolute; } /*上边提示*/ .posTop .triangle_icon { width: 12px; height: 12px; bottom: -12px; } .posTop .triangle_icon .after { bottom: 1px; } .posTop .triangle_icon .after { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; } .posTop .triangle_icon .before { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; } /*右边提示*/ .posRight .triangle_icon { width: 12px; height: 12px; left: -12px; } .posRight .triangle_icon .after { left: 1px; } .posRight .triangle_icon .after { border-top-color: transparent; border-bottom-color: transparent; border-left-color: transparent; } .posRight .triangle_icon .before { border-top-color: transparent; border-bottom-color: transparent; border-left-color: transparent; } /*下边提示*/ .posBottom .triangle_icon { width: 12px; height: 12px; top: -12px; } .posBottom .triangle_icon .after { top: 1px; } .posBottom .triangle_icon .after { border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; } .posBottom .triangle_icon .before { border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; } /*初始化时候的皮肤*/ .validateInit .before { border-color: #F7CE39; } .validateInit .after { border-color: #FFFFE0; } /*失败时候的皮肤*/ .validateError .before { border-color: red; } .validateError .after { border-color: orange; } /*成功时候的皮肤*/ .validateSuc .before { border-color: Green; } .validateSuc .after { border-color: #79D62D; } /*表单相关样式,和验证无关,可删除*/ .form { width: 820px; margin: 0 auto; } .form ul { list-style-type: none; padding-left: 0; } .form li > label { display: inline-block; min-width: 200px; padding-right: 14px; text-align: right; vertical-align: -2px; } .form ul .text { display: inline-block; line-height: 40px; margin-left: 10px; } /*表单相关样式,和验证无关,可删除*/ </style> <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="js/yexiaochai_formValidator.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { var f = new FormValidator(); f.init(); f.validatorAll(); var bt = $('#bt'); var add = $('#add'); var remove = $('#remove'); var name = $('#name'); var single = $('#single'); bt.click(function () { f.validatorAll(); var end = f.validatorState(); var s = ''; }); single.click(function () { f.initItem(name.val()); var s = ''; }); add.click(function () { f.addValidator(name.val()); var s = ''; }); remove.click(function () { f.removeValidator(name.val()); var s = ''; }); }); </script> </head> <body> <div class="form"> <input type="text" id="name" /> <input type="button" value="取消验证" id="remove" /> <input type="button" value="添加验证" id="add" /> <input type="button" value="单项验证" id="single" /> <ul> <li> <label> 身份证:</label> <div class="text"> <input type="text" id="idCard" class="formValidate" data-cfg="{ requred: true, type: 'idCard', msgPosition: 'right', initMsg: '请输入身份证号码!', sucMsg: '正确', errorMsg: '该项必填|格式错误'}" /> </div> </li> <li> <label> 数字: </label> <div class="text"> <input type="text" id="num" class="formValidate" data-cfg="{ type: 'num'}" /> </div> </li> <li> <label> 邮件: </label> <div class="text"> <input type="text" class="formValidate" data-cfg="{ type: 'email', initMsg: '请输入邮箱地址!'}" /> </div> </li> <li> <label> 手机: </label> <div class="text"> <input type="text" class="formValidate" data-cfg="{ type: 'phone', initMsg: '请请输入手机号码!'}" /> </div> </li> <li> <label> QQ: </label> <div class="text"> <input type="text" class="formValidate" data-cfg="{ regexObj: /^[1-9]*[1-9][0-9]*$/, initMsg: '请请输入手机号码!'}" /> </div> </li> <li> <label> 年龄要求(18-25): </label> <div class="text"> <input type="text" class="formValidate" data-cfg="{ rangeObj: 'num|18|25', initMsg: '请输入您的年龄'}" /> </div> </li> <li> <label> 用户名: </label> <div class="text"> <input type="text" class="formValidate" />(ajax类型测试) </div> </li> <li> <label> 密码: </label> <div class="text"> <input type="text" id="pwd" class="formValidate" data-cfg="{ requred: true, type: 'password', msgPosition: 'right', initMsg: '请输入密码!', sucMsg: '正确', errorMsg: '格式错误'}" /> </div> </li> <li> <label> 重复密码: </label> <div class="text"> <input type="text" id="rePwd" class="formValidate" data-cfg="{ compareObj: 'str|pwd|=', requred: true}" />(验证对比时,应该考虑日期,字符串,数字) </div> </li> <li> <label> 工作年限/薪水范围: </label> <div class="text"> <input type="text" id="d_start" class="formValidate" data-cfg="{ type: 'num', msgPosition: 'bottom' }" />- <input type="text" id="d_end" class="formValidate" data-cfg="{ compareObj: 'num|d_start|>', type: 'num', msgPosition: 'bottom' }" /> </div> </li> <li> <br /> <br /> <label> 学历: </label> <div class="text"> <select id="sec" class="formValidate" data-cfg="{ requred: true, initMsg: '请选择学历!', sucMsg: '正确', errorMsg: '必须选择学历' }"> <option value="" selected="selected">请选择</option> <option value="1">专科</option> <option value="2">本科</option> <option value="3">硕士</option> </select> </div> </li> </ul> <input type="button" value="提交" id="bt" /> </div> </body> </html> View Code