//验证 ; RoadUI.Validate = function () { var instance = this; this.bind = function ($elements) { if (!$elements || $elements.size() == 0) { return; } $elements.each(function () { var $this = $(this); var type = $this.attr("type"); if ((typeof type) == "string" && !type.isNullOrEmpty()) { if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox") { $this.bind("change", function () { instance.validateElement($this); }); } else { $this.bind("blur", function () { instance.validateElement($this); }); } } }); }; this.unbind = function () { $("[validate]").each(function () { var $this = $(this); var type = $this.attr("type"); if ((typeof type) == "string" && !type.isNullOrEmpty()) { if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox") { $this.unbind("change"); } else { $this.unbind("blur"); } } }); }; // form1 要验证的form,对象或id promptType提示方式 0:window.alert 1:输入框后面提示 2:输入框后面提示后显示图标,不显示文字 this.validateForm = function (form1, promptType) { var $f; if ((typeof form1) == 'string') { $f = $("#" + $.trim(form1)); } else { $f = $(form1); } if (!$f || $f.size() == 0) { return; } var flag = true; $("[validate]", $f).each(function () { var flag1 = instance.validateElement($(this), promptType); if (!flag1 && promptType == 0) { flag = false; return false; } if (flag && !flag1) { flag = flag1; } }); var e = arguments.callee.caller.arguments[0] || window.event; if (flag && e && e.srcElement != null) { var $submits = $("input[type='submit']", $f); $submits.prop("disabled", true); var eventElement = e.srcElement; if (eventElement) { $submits.each(function () { if ($(this).get(0) === e.srcElement) { $f.append(''); } }); if ("INPUT" == e.srcElement.tagName) { $f.submit(); } } } return flag; }; this.validateElement = function ($element, promptType) { if (!$element) { return false; } var $ele = $($element); if (!$ele || $ele.size() == 0) { return false; } var validateType = $ele.attr("validate"); if (validateType.isNullOrEmpty()) { return false; } var validateArray = validateType.split(','); if (validateArray.length > 1) { var cannullFlag = false; var arrIndex = null; for (var j = 0; j < validateArray.length; j++) { if (validateArray[j].toLowerCase() == "canempty" || validateArray[j].toLowerCase() == "cannull") { cannullFlag = true; arrIndex = j; } } if (cannullFlag) { if (!isNaN(arrIndex)) { validateArray.splice(arrIndex, 1); } var errmsg = ""; var vflag = $ele.val() == null || $ele.val() == undefined || $.trim($ele.val()).length == 0; this.validateCompleted($ele, validateFlag1, promptType, errmsg, false); if (vflag) { return true; } } } for (var i = 0; i < validateArray.length; i++) { if ($.trim(validateArray[i].toString()).length == 0) { continue; } var validateFlag1 = true; switch (validateArray[i].toString().trim().toLowerCase()) { case "notnull": case "notempty": case "null": case "empty": var errmsg = $ele.attr("errmsg") || "不能为空"; validateFlag1 = this.isNotEmpty($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "int": case "integer": var errmsg = $ele.attr("errmsg") || "只能是整数"; validateFlag1 = this.isInt($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "positiveint": var errmsg = $ele.attr("errmsg") || "只能是正整数"; validateFlag1 = this.isPositiveInt($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "negativeint": var errmsg = $ele.attr("errmsg") || "只能是负整数"; validateFlag1 = this.isNegativeInt($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "decimal": case "numeric": case "float": case "double": var errmsg = $ele.attr("errmsg") || "只能是有效数字"; validateFlag1 = this.isDigital($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "positivefloat": var errmsg = $ele.attr("errmsg") || "只能是正实数"; validateFlag1 = this.isPositiveFloat($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "negativefloat": var errmsg = $ele.attr("errmsg") || "只能是负实数"; validateFlag1 = this.isNegativeFloat($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "chinese": var errmsg = $ele.attr("errmsg") || "只能是汉字"; validateFlag1 = this.isChinese($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "mail": case "email": var errmsg = $ele.attr("errmsg") || "邮箱格式错误"; validateFlag1 = this.isEmail($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "phone": case "mobile": case "phonenumber": case "mobilenumber": var errmsg = $ele.attr("errmsg") || "手机号码错误"; validateFlag1 = this.isPhoneNumber($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "ip": var errmsg = $ele.attr("errmsg") || "IP地址格式错误"; validateFlag1 = this.isIp($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "datetime": var errmsg = $ele.attr("errmsg") || "日期时间格式错误"; validateFlag1 = this.isDateTime($ele.val()); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "let": var let = $ele.attr("validate_let") || "0"; let = parseInt(let); if (!let) let = 0; var errmsg = $ele.attr("errmsg") || "不能小于" + let + "个字符"; validateFlag1 = this.isLet($ele.val(), let); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "get": var get = $ele.attr("validate_get") || "0"; get = parseInt(get); if (!get) get = 0; var errmsg = $ele.attr("errmsg") || "不能大于" + get + "个字符"; validateFlag1 = this.isGet($ele.val(), get); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "ajax": var url = $ele.attr("validate_url"); var validateResult = this.isAjax($ele.val(), url); validateFlag1 = validateResult[0]; var errmsg = $ele.attr("errmsg") || validateResult[1]; this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "equal": var equalid = $ele.attr("validate_equalfor"); var $equalobj = $("#" + equalid.trim()); var val = $equalobj != null && $equalobj.size() > 0 ? $equalobj.val() : ""; validateFlag1 = this.isEqual($ele.val(), val); var errmsg = $ele.attr("errmsg") || "验证错误"; this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "checkbox": var errmsg = $ele.attr("errmsg") || "至少选择一项"; validateFlag1 = this.validateCheclbox($ele); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "radio": var errmsg = $ele.attr("errmsg") || "必须选择一项"; validateFlag1 = this.validateRadio($ele); this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; case "editor": var errmsg = $ele.attr("errmsg") || "不能为空"; validateFlag1 = UE.getEditor($element.attr("id")).hasContents(); //validateFlag1 = $.trim(html).length > 0; this.validateCompleted($ele, validateFlag1, promptType, errmsg, true); break; } if (!validateFlag1) { return false; } } return true; }; this.validateCompleted = function ($element, isSuccess, promptType, errMessage, showInfo) { if (promptType == undefined) { promptType = 1; } switch (promptType) { case 0: if (!isSuccess) { window.alert(errMessage); try { $element.focus(); } catch (e) { } } break; case 1: case 2: var $span = $element.nextAll(".validate,.validate1,.validate2"); if ($span.size() > 0) { $span.first() } else { $span = $(''); $element.parent().append($span); } if (promptType == 1) { $span.text(isSuccess ? "" : errMessage); if (showInfo) { //如果验证成功则不显示任何信息,如果要显示则将 validate改为validate1 $span.removeClass().addClass(isSuccess ? "validate" : promptType == 1 ? "validate2" : "validate3"); } else { $span.removeClass().addClass("validate"); } } else { if (!isSuccess) { $span.text("").attr("title", errMessage);; $span.removeClass("").addClass("validate3"); } else { $span.removeClass("").addClass("validate").remove(); } } break; } }; this.isNotEmpty = function (val) { return val != null && val != undefined && $.trim(val.toString()).length > 0; }; this.isDigital = function (val) { return this.isInt(val) || this.isFloat(val); }; this.isInt = function (val) { var reg = /^(-|\+)?\d+$/; return reg.test(val); }; this.isPositiveInt = function (val) { return this.isInt(val) && parseInt(val) >= 0; }; this.isNegativeInt = function (val) { return this.isInt(val) && parseInt(val) < 0; }; this.isFloat = function (val) { var reg = new RegExp("^[0-9]*\.[0-9]+$"); return reg.exec(val) && this.isInt($.trim(val).substring(0, 1)); }; this.isPositiveFloat = function (val) { return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) >= 0; }; this.isNegativeFloat = function (val) { return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) < 0; }; this.isChinese = function (val)//是否为中文 { var reg = /^[\u0391-\uFFE5]+$/; return reg.test(val); }; this.isEmail = function (val)//是否为email { var reg = /^[-_A-Za-z0-9\.]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; return reg.test(val); }; this.isIp = function (val)//是否为IP { var check = function (v) { try { return (v <= 255 && v >= 0); } catch (x) { return false; } } var re = val.split("."); return (re.length == 4) ? (check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])) : false; }; this.isPhoneNumber = function (val)//是否为手机号码 { return /^13\d{9}$/g.test(val) || (/^15[0-35-9]\d{8}$/g.test(val)) || (/^18[00-9]\d{8}$/g.test(val)) }; this.isDateTime = function (val) { return true; }; this.isAjax = function (val, url) { var txt = ""; $.ajax({ url: url, async: false, type: "POST", data: { "value": val }, cache: false, complete: function (response) { txt = $.trim(response.responseText); } }); return ["1" == txt || "true" == txt, txt]; }; this.isLet = function (val, let) { if (!this.isNotEmpty(val) || !this.isInt(let)) { return false; } return $.trim(val).length >= parseInt(let); }; this.isGet = function (val, get) { if (!this.isNotEmpty(val) || !this.isInt(get)) { return true; } return $.trim(val).length <= parseInt(get); }; this.isEqual = function (val, val1) { return val === val1; }; this.validateCheclbox = function ($e) { var name = $e.attr('name'); return $(":checkbox:checked[name='" + $.trim(name) + "']").size() > 0; }; this.validateRadio = function ($e) { var name = $e.attr('name'); var flag = true; return $(":radio:checked[name='" + $.trim(name) + "']").size() > 0; }; }