//表单验证扩展 var rules = { required: { validator: function (value,name) { if (name) { var isvalid = false; $('[name="'+name[0]+'"]').each(function () { if (this.checked) { isvalid = true; return false; } }); return isvalid; } else { if (!value || value.length === 0 || value.replace(/<[^>]*>/g, '').length === 0) { return false; } else { return true; } } }, message:"不能为空" }, email: { validator: function (_42) { return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(_42); }, message: "请输入正确的电子邮箱" }, url: { validator: function (_43) { return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(_43); }, message: "请输入正确的网址" }, length: { validator: function (_44, _45) { var len = $.trim(_44).length; return len >= _45[0] && len <= _45[1]; }, message: "Please enter a value between {0} and {1}." }, //验证中文 cn: { validator: function (value) { return /^[\u4E00-\u9FA5]{2,4}$/.test(value); }, message: "只能输入汉字." }, //字符验证 key: { validator: function (value) { return /^[u0391-uFFE5w]+$/.test(value); }, message: "只能包括中文字、英文字母、数字和下划线." }, //验证中文,英文,数字 cnennum: { validator: function (value) { return /^[a-zA-Z0-9u4E00-u9FA5]+$/.test(value); }, message: "只能包括中文字、字母、数字." }, ennum: { validator: function (value) { return /^[a-zA-Z0-9]+$/.test(value); }, message: "只能包括英文字母、数字." }, num: { validator: function (value) { return /^[0-9.]+$/.test(value); }, message: "只能输入数字." }, en: { validator: function (value) { var reg = /^[a-zA-Z]*$/; return reg.test(value); }, message: "请输入英文字母." }, //手机号码验证 mobi: { validator: function (value) { var reg = /^1[\d]{10}$/; return value.length == 11 && reg.test(value); }, message: "请输入11位手机号码." }, //电话号码验证 tel: { validator: function (value) { //电话号码格式010-12345678 var reg = /(^(\d{3,4}-)\d{7,8})$/; return reg.test(value); }, message: "请输入固定电话(格式:区号-号码)." }, //联系电话(手机/电话皆可)验证 tels: { validator: function (value) { var tel = /(^(\d{3,4}-)\d{7,8})$|^(1[0-9]{10})$/; return tel.test(value); }, message: "请输入固话(格式:区号-号码)或11位手机号码." }, //验证国内邮编验证 postCode: { validator: function (value) { var reg = /[\d]{6}/; return reg.test(value); }, message: "请输入正确的邮编." }, //身份证号码验证 idcard: { validator: function (value) { return isIdCardNo(value); }, message: "请正确输入您的身份证号码." }, //身份证号 allid: { validator: function (value) { if (value.length == 18) { return isIdCardNo(value); } else { return true; } }, message: "请输入正确的身份证号." }, //验证两个不同时为空 //可以自定义提示信息 allNotNull: { validator: function (toValue, fromValue) { if (fromValue == null || fromValue.length == 0 || fromValue[0] == null || fromValue[0] == "") { if (toValue == null || toValue.length == 0 || toValue[0] == null || toValue[0] == "") { $.fn.validatebox.defaults.rules.compareDigit.message = "中,英.文名不可同时为空 "; return false; } else { return true; } } else { return true; } }, message: "" }, pwd: { validator: function (value) { return (value.length >= 8 && value.length <= 20 && value.match(/[a-z]/) && value.match(/[A-Z]/) && value.match(/[0-9]/)); }, message: "密码格式错误." }, //数字验证大小,结束值应该大于开始值 //可以自定义提示信息 compareDigit: { validator: function (toValue, fromValue) { if (fromValue == null || fromValue.length == 0 || fromValue[0] == null || fromValue[0] == "") { return true; } if (parseFloat(toValue) > parseFloat(fromValue[0])) { return true; } else { if (fromValue.length >= 2) { $.fn.validatebox.defaults.rules.compareDigit.message = fromValue[1]; } else { $.fn.validatebox.defaults.rules.compareDigit.message = '结束值应该大于开始值'; } return false } }, message: "" }, equalTo: { validator: function (value, param) { return $(param[0]).val() == value; }, message: '确认密码与新密码不一致' }, //日期、时间验证大小,结束日期应该大于开始日期 //可以自定义提示信息 compareDate: { validator: function (toDate, param) { if (param == null || param.length == 0 || param[0] == null || param[0] == "") { return true; } if (toDate > param[0]) { return true; } else { if (param.length >= 2) { $.fn.validatebox.defaults.rules.compareDate.message = param[1]; } else { $.fn.validatebox.defaults.rules.compareDate.message = '结束日期应该大于开始日期'; } return false } }, message: '' }, remote:{ validator:function(value,param){ var params = {}; params[param[1]] = value; $.post(param[0],params,function(data){ if(!data.msg){ $.fn.validatebox.defaults.rules.account.message = param[2]; } return data.msg; }); }, message:"" } } //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num) { var intStrLen = num.length; if (intStrLen != 18) { return false; } if (!/^([1-9]\d{5}((((19|20)(([02468][048])|([13579][26]))0229))|((20[0-9][0-9])|(19[0-9][0-9]))((((0[1-9])|(1[0-2]))((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))31)|(((0[1,3-9])|(1[0-2]))(29|30)))))\d{3}[0-9X])$/.test(num)) return false; var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); var error; var varArray = new Array(); var intValue; var lngProduct = 0; var intCheckDigit; var idNumber = num; // initialize // check and set value for (i = 0; i < intStrLen; i++) { varArray[i] = idNumber.charAt(i); if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { //error = "错误的身份证号码!."; //alert(error); //frmAddUser.txtIDCard.focus(); return false; } else if (i < 17) { varArray[i] = varArray[i] * factorArr[i]; } } for (i = 0; i < 17; i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = 12 - lngProduct % 11; switch (intCheckDigit) { case 10: intCheckDigit = 'X'; break; case 11: intCheckDigit = 0; break; case 12: intCheckDigit = 1; break; } // check last digit if (varArray[17].toUpperCase() != intCheckDigit) { return false; } return true; } //添加移除验证 $('body').on('blur', '[data-options]', function () { valids(this); }); $('body').on('click', '[data-options] input:radio,[data-options] input:checkbox', function () { valids($(this).closest('[data-options]')); }); function valids(ipt) { var isvalid = true; ipt = $(ipt); var opts = ipt.attr('data-options').split(","); var val = ''; if (typeof (ipt[0].value) != 'undefined') { val = ipt.val() } else { val = ipt.text(); } var param = ''; var rule = ''; var reg = /([a-zA-Z_]+)(.*)/; var result = ''; var error = ipt.closest('.has-error'); if (error) { error.removeClass('has-error'); var validgroup = ipt.closest('.valid-group'); if (validgroup && validgroup.length > 0) { validgroup.find('.valid-error').text(''); } } var r = ''; var msg = ''; for (var i in opts) { r = opts[i].split(':'); result = reg.exec(r[0]); rule = rules[result[1]]; param = eval(result[2]); if (!rule["validator"](val, param)) { isvalid = false; if (r.length > 1) { msg = r[r.length - 1]; } else { msg = rule["message"]; } sendError(ipt, msg); break; } } return isvalid; } function sendError(obj, msg) { obj.parent().closest('div').addClass('has-error'); var validgroup = obj.closest('.valid-group'); if (validgroup && validgroup.length > 0) { if (msg == '不能为空') { msg = obj.closest('.has-error').find('label').text().replace(/[: \s]/g, '') + '不能为空'; } validgroup.find('.valid-error').text(msg); } else { var next = obj.next('span.valid'); if (next && next.length > 0) { next.text(msg); } else { obj.after('' + msg + ''); } } } (function ($) { $.fn.extend({ valid: function () { var obj = $(this); var isvalid = true; obj.find('[data-options]').each(function () { isvalid = valids(this); if (!isvalid) return false; }); return isvalid; } }) })(jQuery)