/* EasyUI 自带验证框使用方法: missingMessage:未填写时显示的信息 validType:验证类型见下示例 invalidMessage:无效的数据类型时显示的信息 required="true" 必填项 class="easyui-validatebox" 文本验证 class="easyui-numberbox" 数字验证 、 以下扩展验证 作者:强子 时间:2014-5-29 */ $.extend($.fn.validatebox.defaults.rules, { maxIntegerNumber: {//验证最大的数字 validator: function (value, param) { value=parseInt(value); if(value>param[0]){ return false; } return true; }, message: '请输入小于或等于{0}的整数.' }, minIntegerNumber: {//验证最小的数字 validator: function (value, param) { value=parseInt(value); if(value= param[0]; }, message: '请输入至少{0}个字符.' }, maxLength: { validator: function (value, param) { return value.length <= param[0]; }, message: '请输入至多{0}个字符.' }, length: { validator: function (value, param) { var len = $.trim(value).length; return len >= param[0] && len <= param[1]; }, message: "输入内容长度必须介于{0}和{1}之间." }, phone: {// 验证电话号码 validator: function (value) { return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value); }, message: '格式不正确,请使用下面格式:020-88888888' }, mobile: {// 验证手机号码 validator: function (value) { return /^(1)\d{10}$/i.test(value); }, message: '手机号码格式不正确' }, mobileAndPhone : { //验收手机号码或固定电话 validator : function(value) { return /^1\d{10}$/i.test(value) || /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value); }, message : '请输入正确的手机号码或固定电话' }, intOrFloat: {// 验证整数或小数 validator: function (value) { return /^\d+(\.\d+)?$/i.test(value); }, message: '请输入数字,并确保格式正确' }, currency: {// 验证货币 大于等于0 validator: function (value) { return /^\d+(\.\d+)?$/i.test(value); }, message: '货币格式不正确' }, nagtiveCurrency: {// 验证货币 任意数字 validator: function (value) { return /^[-+]?\d+(\.\d+)?$/i.test(value); }, message: '货币格式不正确' }, qq: {// 验证QQ,从10000开始 validator: function (value) { return /^[1-9]\d{4,9}$/i.test(value); }, message: 'QQ号码格式不正确' }, integer: {// 验证整数 validator: function (value) { return /^[+]?[1-9]+\d*$/i.test(value); }, message: '请输入大于0整数' }, digital: {// 验证纯数字1-20位 validator: function (value) { return /^\d{1,20}$/i.test(value); }, message: '请输入1到20位之间的纯数字' }, sinteger: {// 验证正整数+0 validator: function (value) { return /(^[+]?[1-9]+\d*$)|0/i.test(value); }, message: '请输入0或者正整数' }, age: {// 验证年龄 validator: function (value) { return /^(?:[1-9][0-9]?|1[01][0-9]|120)$/i.test(value); }, message: '年龄必须是0到120之间的整数' }, chinese: {// 验证中文 validator: function (value) { return /^[\Α-\¥]+$/i.test(value); }, message: '请输入中文' }, english: {// 验证英语 validator: function (value) { var str = value.replace(/(^\s*)|(\s*$)/g,""); return /^([A-Za-z]+\s?)*[A-Za-z]$/.test(value); }, message: '请输入英文' }, unnormal: {// 验证是否包含空格和非法字符 validator: function (value) { return /.+/i.test(value); }, message: '输入值不能为空和包含其他非法字符' }, invalidatetext: {// 验证是否包含空格和非法字符 validator: function (value) { var ret = true; //var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()—|{}【】‘;:”“'。,、?\\\\]"); var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\]<>/?~!@#¥……&*()—|{}【】‘;:”“'。,?\\\\]") // var pattern = new RegExp("[\\\\]") for (var i = 0; i < value.length; i++) { var rs = value.substr(i, 1); if (pattern.test(rs)) { ret = false; break; } } return ret; }, message: "输入值不能包含`~!@#$^&*()=|{}':;',.<>/?\\~!@#¥……&*()—|{}【】‘;:”“'?[]非法字符" }, invalidateSymbol: {// 验证是否包含空格和非法字符 validator: function (value) { var ret = true; var pattern = new RegExp("[`$%|{}':;',\\[\\]/?~……()—|{}【】‘;:”“'。,、/?]") for (var i = 0; i < value.length; i++) { var rs = value.substr(i, 1); if (pattern.test(rs)) { ret = false; break; } } return ret; }, message: "输入值不能包含`$%|{}':;',\\[\\]/?~……()—|{}【】‘;:”“'。,、/?非法字符" }, invalidatenum: {// 验证是否包含空格和非法字符 validator: function (value) { var ret = true; var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\]<>/?~!@#¥……&*()—|{}【】‘;:”“'。,、?]") for (var i = 0; i < value.length; i++) { var rs = value.substr(i, 1); if (pattern.test(rs)) { ret = false; break; } } return ret; }, message: '输入值不能包含其他非法字符' }, invalidateArea: {// 验证是否包含空格和非法字符 validator: function (value) { var ret = true; var pattern = new RegExp("[`\\\\/]") for (var i = 0; i < value.length; i++) { var rs = value.substr(i, 1); if (pattern.test(rs)) { ret = false; break; } } return ret; }, message: '输入值不能包含其他非法字符' }, username: {// 验证用户名 validator: function (value) { return /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i.test(value); }, message: '用户名不合法(字母开头,允许6-16字节,允许字母数字下划线)' }, password: {// 验证密码 validator: function (value) { return /[a-zA-Z0-9_]{6,16}$/i.test(value); }, message: '密码不合法(允许6-16字节,允许字母数字下划线)' }, faxno: {// 验证传真 validator: function (value) { // return /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/i.test(value); return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value); }, message: '传真号码不正确' }, zip: {// 验证邮政编码 validator: function (value) { return /^[1-9]\d{5}$/i.test(value); }, message: '邮政编码格式不正确' }, ip: {// 验证IP地址 validator: function (value) { return /d+.d+.d+.d+/i.test(value); }, message: 'IP地址格式不正确' }, name: {// 验证姓名,可以是中文或英文 validator: function (value) { return /^[\Α-\¥]+$/i.test(value) | /^\w+[\w\s]+\w+$/i.test(value); }, message: '请输入姓名' }, date: {// 验证日期 validator: function (value) { //格式yyyy-MM-dd或yyyy-M-d return /^(?:(?!0000)[0-9]{4}([-]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-]?)0?2\2(?:29))$/i.test(value); }, message: '清输入合适的日期格式' }, msn: { validator: function (value) { return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); }, message: '请输入有效的msn账号(例:abc@hotnail(msn/live).com)' }, same: { validator: function (value, param) { if ($("#" + param[0]).val() != "" && value != "") { return $("#" + param[0]).val() == value; } else { return true; } }, message: '两次输入的密码不一致!' }, pdfFileType: { // 验证文件格式PDF validator: function (value) { var result = true; if (value != '') { var fileType = value.substring(value.lastIndexOf("."), value.length); fileType = fileType.toUpperCase(); if (fileType != '.PDF') { result = false; } } return result; }, message: '请选择格式为PDF的文件.' }, double: { //两位小数 validator: function (value) { return /^([1-9]\d*(\.\d{1,2})?$)|^(0\.\d{1,2}$)|^0$/.test(value); }, message: '请输入大于0并且最多2位小数的数字.' }, doubleNum: {//两位小数 但为不能输入0 /^\d+(\d|(\.[1-9]{1,2}))$/ validator: function (value) { return /^([1-9]\d*(\.\d{1,2})?$)|^(0\.\d{1,2})$/.test(value); }, message: '请输入大于0并且最多2位小数的数字.' }, floatSix: { //6位小数 validator: function (value) { return /^([1-9]\d*(\.\d{1,6})?$)|^(0\.\d{1,6}$)|^0$/.test(value); }, message: '请输入最多6位小数的数字.' }, rowsExist : { //多行数据不允许重复验证 validator : function(value, param) { var result = true; var cols=$("[validatename='"+param[0]+"']"); var num=0; cols.each(function() { // console.log(value +"==2=="+ $(this).val()); if(value==$(this).val()) { num++; } }); if(num>1) { result=false; } return result; }, message : '{1}已存在,请确认!' }, buChongFu: { //重复值验证 validator: function (value, param) { var name = param[0]; var ret = true; if (jQuery(this).is('select')) { ret = checkSelectShiFouChongFu(name); } else { ret = checkInputShiFouChongFu(name); } return ret; }, message: '不能出现重复的值.' }, numberFw:{ validator:function(value,param){ var num=parseFloat(value); return num>=param[0] && num<=param[1]; }, message:"输入数值必须介于{0}和{1}之间." }, remote: { //异步验证 validator: function (value, param) { var result = true; var mch = Math.round(Math.random() * 10000); var datastr = "validateparam1=" + value; if (param.length > 2) { for(var len = 2; len < param.length ; len++){ datastr += "&validateparam"+len+"=" + $("#" + param[len]).val(); } } datastr += "&mch=" + mch; jQuery.ajax({ type: "POST", url: param[0], data: datastr, dataType: 'json', async: false, success: function (retjson) { if (retjson) { result = true; } else { result = false; } } }); return result; }, message: '{1}已存在' }, remoteForText: { //异步验证,自定义提示 validator: function (value, param) { var result = true; var mch = Math.round(Math.random() * 10000); var datastr = "validateparam1=" + value; if (param.length > 2) { for(var len = 2; len < param.length ; len++){ datastr += "&validateparam"+len+"=" + $("#" + param[len]).val(); } } datastr += "&mch=" + mch; jQuery.ajax({ type: "POST", url: param[0], data: datastr, dataType: 'json', async: false, success: function (retjson) { if (retjson) { result = true; } else { result = false; } } }); return result; }, message: '{1}' }, //多参数异步验证 /** * @作者:焦丽娜 * @日期:2014-11-15 * @功能描述:验证数据重复(3个参数以上) */ paramsremote: { validator: function (value,param) { var result = true; var mch = Math.round(Math.random() * 10000); var datastr ="validateparam=" + value; if (param.length>=3) { var paramJson= eval(param[2]); //参数Id for(var i=0;i 100) { return false; } return true; }, message: '总学时输入不正确.' } }); //验证input textarea重复 function checkInputShiFouChongFu(validatename){ var ret=true; var evs=jQuery("[validatename='"+validatename+"']"); var evsClone=evs.clone(); evs.each(function(){ var nowSfzh= jQuery(this); var count=0; evsClone.each(function(){ if(jQuery(this).val()==nowSfzh.val() && nowSfzh.val()!=''){ count++; if(count>1){ ret=false; } } }); }); return ret; } //验证select重复 function checkSelectShiFouChongFu(validatename){ var ret=true; var evs=jQuery("[validatename='"+validatename+"'] option:selected"); var evsClone=evs.clone(); evs.each(function(){ var nowSfzh= jQuery(this); var count=0; evsClone.each(function(){ if(jQuery(this).val()==nowSfzh.val() && nowSfzh.val()!=''){ count++; if(count>1){ ret=false; } } }); }); return ret; } /** * 创建人 : 强当安 * 身份证号验证入口方法 : IdCardValidate(idCard) idCard :18或15位身份证号 * * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * p: 性别,奇数为男,偶数为女 *

* 身份证18位编码规则:dddddd yyyymmdd xxx y * dddddd:地区码 * yyyymmdd: 出生年月日 * xxx:顺序类编码,无法确定,奇数为男,偶数为女 * y: 校验码,该位数值可通过前17位计算获得 *

* 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ] * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ] * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 ) * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置 * */ var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子 var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X function IdCardValidate(idCard) { idCard = trim(idCard.replace(/ /g, "")); if (idCard.length == 15) { return isValidityBrithBy15IdCard(idCard); } else if (idCard.length == 18) { var a_idCard = idCard.split("");// 得到身份证数组 if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){ return true; }else { return false; } } else { return false; } } /** * 判断身份证号码为18位时最后的验证位是否正确 * @param a_idCard 身份证号码数组 * @return */ function isTrueValidateCodeBy18IdCard(a_idCard) { var sum = 0; // 声明加权求和变量 if (a_idCard[17].toLowerCase() == 'x') { a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作 } for ( var i = 0; i < 17; i++) { sum += Wi[i] * a_idCard[i];// 加权求和 } valCodePosition = sum % 11;// 得到验证码所位置 if (a_idCard[17] == ValideCode[valCodePosition]) { return true; } else { return false; } } /** * 通过身份证判断是男是女 * @param idCard 15/18位身份证号码 * @return 'female'-女、'male'-男 */ function maleOrFemalByIdCard(idCard){ idCard = trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。 if(idCard.length==15){ if(idCard.substring(14,15)%2==0){ return 'female'; }else{ return 'male'; } }else if(idCard.length ==18){ if(idCard.substring(14,17)%2==0){ return 'female'; }else{ return 'male'; } }else{ return null; } // 可对传入字符直接当作数组来处理 // if(idCard.length==15){ // alert(idCard[13]); // if(idCard[13]%2==0){ // return 'female'; // }else{ // return 'male'; // } // }else if(idCard.length==18){ // alert(idCard[16]); // if(idCard[16]%2==0){ // return 'female'; // }else{ // return 'male'; // } // }else{ // return null; // } } /** * 验证18位数身份证号码中的生日是否是有效生日 * @param idCard 18位书身份证字符串 * @return */ function isValidityBrithBy18IdCard(idCard18){ var year = idCard18.substring(6,10); var month = idCard18.substring(10,12); var day = idCard18.substring(12,14); var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); // 这里用getFullYear()获取年份,避免千年虫问题 if(temp_date.getFullYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ return false; }else{ return true; } } /** * 验证15位数身份证号码中的生日是否是有效生日 * @param idCard15 15位书身份证字符串 * @return */ function isValidityBrithBy15IdCard(idCard15){ var year = idCard15.substring(6,8); var month = idCard15.substring(8,10); var day = idCard15.substring(10,12); var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法 if(temp_date.getYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ return false; }else{ return true; } } //去掉字符串头尾空格 function trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } /** * 删除tr * @param ev:img对象(this) */ function deleteTr(ev){ var tbody=jQuery(ev).parent().parent().parent(); var thisTr=jQuery(ev).parent().parent(); thisTr.remove(); var index=0; tbody.find("tr").each(function(){ if(index>0){ var tr=jQuery(this); var inputs=tr.find("input"); var selects=tr.find("select"); var textAreas=tr.find("textArea"); setNameIndex(inputs,index-1); setNameIndex(selects,index-1); setNameIndex(textAreas,index-1); } index++; }); } /* 添加TR tbody 要添加在的tbody对象 tr 要添加的tr对象 trsize 最多允许添加的tr数量 addname 添加的名称 */ function addTr(tbody,tr,trsize,addname){ if(trsize>0){ var trs=tbody.children("tr"); if(trs.size()>trsize){ // alert(addname); //2015-4-28 wf 修改 showMsg(addname, 1, 500, 50, ""); return false; } } var trhtml=""+tr.html()+""; tbody.append(trhtml); var index=0; tbody.find("tr").each(function(){ if(index>0){ var tr=jQuery(this); var inputs=tr.find("input"); var selects=tr.find("select"); var textAreas=tr.find("textArea"); setNameIndex(inputs,index-1); setNameIndex(selects,index-1); setNameIndex(textAreas,index-1); } index++; }); return true; } function setNameIndex(evs,index){ evs.each(function(k,v){ var name=jQuery(this).attr("name"); if(typeof(name) == "undefined"){ name=""; } if(name.indexOf(".")>-1){ var strs1=name.split("."); //alert(name); var strs2=name.split("[") var newname = strs2[0]+"["+index+"]."+[strs1[1]]; //alert(newname); jQuery(this).attr("name",newname); } }); } function setIDIndex(evs,index){ evs.each(function(k,v){ var id=jQuery(this).attr("id"); if(typeof(id) == "undefined"){ id=""; } jQuery(this).attr("id",id+k); }); }