/* Copyright (C) 2009 - 2012 WebSite: Http://wangking717.javaeye.com/ Author: wangking */ $(function() { var xOffset = -20; // x distance from mouse var yOffset = 20; // y distance from mouse //为控件初始化tip, $("[regstyle]").each(function(i) { if ($(this).attr('tip') == undefined) { dstyle = $(this).attr('regstyle'); arrd = dstyle.split(';'); for (var key in arrd) { if (arrd[key].split(':')[0].toLowerCase() == "tip" && arrd[key].split(':').length > 1) { $(this).attr('tip', arrd[key].split(':')[1]); break; } } } }); //input action $("[regstyle]").hover( function(e) { $("p#vtip").remove(); if ($(this).attr('tip') != undefined) { var top = (e.pageY + yOffset); var left = (e.pageX + xOffset); $('body').append('

' + $(this).attr('tip') + '

'); $('p#vtip').css("top", top + "px").css("left", left + "px").css("display", "block").css("position", "absolute"); } }, function() { if ($(this).attr('tip') != undefined) { $("p#vtip").remove(); } } ).mousemove( function(e) { if ($(this).attr('tip') != undefined) { var top = (e.pageY + yOffset); var left = (e.pageX + xOffset); $("p#vtip").css("top", top + "px").css("left", left + "px").css("position", "absolute"); } } ).blur(function() { validate($(this)); }); $("form").submit(function() { return validateAll(); }); }); function validateAll() { var isSubmit = true; $("[regstyle]").each(function() { if (!validate($(this))) { if (!($("#"+ $(this).attr("id")+"h").length > 0 && $("#"+ $(this).attr("id")+"h").val()!="" )) isSubmit = false; } }); return isSubmit; } function validate(obj) { var objValue = obj.attr("value"); dstyle = obj.attr('regstyle'); arrd = dstyle.split(';'); var reg = "",regInfo="",ajax=""; for (var key in arrd) { if (arrd[key].split(':').length < 2) continue; akey = arrd[key].split(':')[0].toLowerCase(); avalue = arrd[key].split(':')[1]; switch (akey) { case "datatype": //int|email|idcard|time|date|datetime|float|phone if (reg != "") break; switch (avalue.toLowerCase()) { case "int": reg = "^[0-9]*$"; regInfo = "请输入正整数"; break; case "float": case "numeric": reg = "^[-\\+]?\\d+(\\.\\d+)?$"; regInfo = "请输入数字"; break; case "email": reg = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$"; regInfo = "邮件格式不符合要求"; break; case "idcard": //reg = "(^\d{18}$)|(^\d{17}(\d|X|x)$)"; regInfo = isIdCardNo(objValue); if (regInfo != "") { change_error_style(obj, "add"); change_tip(obj, regInfo, "add"); return false; } break; case "time": //01:12:59 01:12 reg = "^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:[0-5][0-9]){0,1}$"; regInfo = "请输入正确的时间,格式如:12:01:52 或 12:01"; break; case "date": reg = "^((19\\d\\d|2\\d\\d\\d)[-]([1][0-2]|[0]?[1-9])[-](0?[1-9]|[12][0-9]|3[01]))$"; regInfo = "请输入正确的日期,格式如:2012-02-10"; break; case "datetime": reg = "^((19\\d\\d|2\\d\\d\\d)[-]([1][0-2]|[0]?[1-9])[-](0?[1-9]|[12][0-9]|3[01]))(\\s)(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:[0-5][0-9]){0,1}$"; regInfo = "请输入正确的日期时间,格式如:2012-02-10 01:23:15"; break; case "phone": reg = "^(1)[0-9]{10}$"; regInfo = "手机号码不正确"; break; case "en_num": //只能输入英文、数字及下划线 reg = "^[A-Za-z0-9_]*$"; regInfo = "只能输入英文字母及数字"; break; case "cn": //只能输入中文 reg = "^[\\u0391-\\uFFE5]+$"; regInfo = "只能输入中文"; break; case "url": reg = "^http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$"; regInfo = "请输入完整的网址"; break; } break; case "reg": reg = avalue; break; case "notnul": if (avalue.toLowerCase() != "false" && objValue == "") { change_error_style(obj, "add"); change_tip(obj, "必填项,不能为空", "add"); return false; } break; case "fun": //扩展函数 eval("funs = " + avalue + "(obj);"); if (funs != "") { change_error_style(obj, "add"); change_tip(obj, funs, "add"); return false; } break; case "ajax": //ajax链接 ajax = avalue; break; case "min": if (avalue.match(/\d+/)!=null && objValue.replace(/[^\x00-\xff]/g,'xx').length < parseInt(avalue)) { change_error_style(obj, "add"); change_tip(obj, "长度须大于" + avalue + "个字符(一个汉字等于两个字符)!", "add"); return false; } break; case "max": if (avalue.match(/\d+/) != null && objValue.replace(/[^\x00-\xff]/g, 'xx').length > parseInt(avalue)) { change_error_style(obj, "add"); change_tip(obj, "长度须小于" + avalue + "个字符(一个汉字等于两个字符)!", "add"); return false; } break; } } if (reg != "") { var reg1 = new RegExp(reg); if (!reg1.test(objValue)) { // alert("正则未通过" + reg); change_error_style(obj, "add"); if (regInfo == "") change_tip(obj, null, "remove"); else change_tip(obj, regInfo, "add"); return false; } } reg1 = new RegExp("[=+<>']"); if (reg1.test(objValue)) { change_error_style(obj, "add"); change_tip(obj, "不允许输入“=+<>'”", "add"); return false; } if (ajax != "") { return ajax_validate(obj, ajax); } change_error_style(obj, "remove"); change_tip(obj, null, "remove"); return true; } function ajax_validate(obj,url){ //frm.aspx?mytype=sfzh&sfzh=222222 var url_str = url; if(url_str.indexOf("?") != -1){ url_str = url_str + "&mytype=" + obj.attr("name") + "&" + obj.attr("name") + "=" + obj.attr("value"); }else{ url_str = url_str + "?mytype=" + obj.attr("name") + "&" + obj.attr("name") + "=" + obj.attr("value"); } //alert(url_str); var feed_back = $.ajax({url: url_str,cache: false,async: false}).responseText; feed_back = feed_back.replace(/(^\s*)|(\s*$)/g, ""); if(feed_back == ''){ change_error_style(obj,"remove"); change_tip(obj,null,"remove"); return true; }else{ change_error_style(obj,"add"); change_tip(obj,feed_back,"add"); return false; } } function change_tip(obj,msg,action_type){ if(obj.attr("tip") == undefined){//初始化判断TIP是否为空 obj.attr("is_tip_null","yes"); } if(action_type == "add"){ if(obj.attr("is_tip_null") == "yes"){ obj.attr("tip",msg); }else{ if(msg != null){ if(obj.attr("tip_bak") == undefined){ obj.attr("tip_bak",obj.attr("tip")); } obj.attr("tip",msg); } } }else{ if(obj.attr("is_tip_null") == "yes"){ obj.removeAttr("tip"); obj.removeAttr("tip_bak"); }else{ obj.attr("tip",obj.attr("tip_bak")); obj.removeAttr("tip_bak"); } } } function change_error_style(obj,action_type){ if(action_type == "add"){ obj.addClass("input_validation-failed"); }else{ obj.removeClass("input_validation-failed"); } } $.fn.validate_callback = function(msg,action_type,options){ this.each(function(){ if(action_type == "failed"){ change_error_style($(this),"add"); change_tip($(this),msg,"add"); }else{ change_error_style($(this),"remove"); change_tip($(this),null,"remove"); } }); }; ///身份证号 function isIdCardNo(num) { var len = num.length, re; if (len == 18) { if (isNaN(num.substr(0, 17))) { return "输入的身份证号不合法!"; } re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/); } else { return "输入的字符位数不对!"; } var a = num.match(re); if (a != null) { if (len == 15) { var D = new Date("19" + a[3] + "/" + a[4] + "/" + a[5]); var B = D.getYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5]; } else { var D = new Date(a[3] + "/" + a[4] + "/" + a[5]); var B = D.getFullYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5]; } if (!B) { return "输入的身份证号 " + a[0] + " 里出生日期不对!"; } } if (len == 18 && createCK(num).toUpperCase() != num.substr(17, 1).toUpperCase()) return "输入的身份证号不合法"; return ""; } function createCK(strID) { var s = 0; var WI = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); var AI = "10X98765432"; for (i = 0; i < 17; i++) { j = strID.substr(i, 1) * WI[i]; s = s + j; } s = s % 11; return AI.substr(s, 1); }