/**//* * JavaScript Validation Framework * * Author: Michael Chen(mechiland) on 2004/03 * This software is on the http://www.cosoft.org.cn/projects/jsvalidation * for update, bugfix, etc, you can goto the homepage and submit your request * and question. * Apache License 2.0 * You should use this software under the terms. * * Please, please keep above words. At least ,please make a note that such as * "This software developed by Michael Chen(http://www.jzchen.net)" . * $Id: validation-framework.js,v 1.7 2004/04/30 05:33:29 jzchen Exp $ * update : 1) 2007-12-16 add support of firefox 2. // by lein Main changes: a. In ValidationFramework.getDocumentElement, a little difference of 'xmlDoc' between firefox and ie was incarnated. b. In FormFactory.getFormFromId, firefox doesn't support has item property of xmldoc. */ /**//** Config Section, Config these fields to make this framework work. **/ // If there is only one config file in your system, use this property. otherwise, use // ValidationFramework.init("configfile") // instead. //alert(window.location.href) var ValidationRoot =""; // the field style when validation fails. it aim to provide more beautiful UI and more good // experience to the end-user. // NOTE: this will be buggy. Please report the error to me. // The style has been changed at 2007-12-10; var ValidationFailCssStyle ="border:1px solid #F77B00; color:#D90005"; //Validation function. The entry point of the framework. function doValidate(formRef) ...{ try...{ var formId = formRef; if (typeof (formRef) =="string") ...{ formId = formRef; }elseif (typeof (formRef) =="object") ...{ formId = formRef.getAttribute("id"); } //alert(formId) var form = FormFactory.getFormFromId(formId); if (form !=null) ...{ //alert(form) return ValidationFramework.validateForm(form); }else...{ returnfalse; } }catch (e) ...{ ValidationFramework.exception(e.name+":"+e.description); returnfalse; } } /**//**===================================================================**/ /**//* var prefix = ["MSXML2", "MSXML", "Microsoft", "MSXML3"]; for (var i = 0; i < prefix.length; i++) { //return new ActiveXObject(prefix[i] + ".DomDocument"); var obj = new ActiveXObject(prefix[i] + ".DomDocument"); * JSValidation Framework Code Started * * Please do not modify the code unless you are very familiar with JavaScript. * The best way to solve problem is report the problem to our project page. * url: http://cosoft.org.cn/projects/jsvalidation */ // The Xml document. To process cross-browser. Thanks Eric. function XmlDocument() ...{ } XmlDocument.create =function () ...{ //alert("XmlDocument.create ") return Try.these( function()...{returnnew ActiveXObject('MSXML2.DomDocument')}, function()...{returnnew ActiveXObject('MSXML.DomDocument')}, function()...{returnnew ActiveXObject('Microsoft.DomDocument')}, function()...{returnnew ActiveXObject('MSXML3.DomDocument')} ) ||false; }; function ValidationFramework() ...{} ValidationFramework._validationCache =null; ValidationFramework._currentForm =null; ValidationFramework._userLanguage="auto"; /**//** * Validate a form. * NOTE: the form is Framework virture form, not the HTML Form. * Html Form can be transform to Virture form by * FormFactory.getFormFromId(htmlFormId); * See the doc for more information. * @param form the virtual form. */ ValidationFramework.validateForm =function(fform) ...{ ValidationFramework._currentForm = fform; var failFields = []; var id = fform.getId(); var showError = fform.getShowError(); var showType = fform.getShowType(); //alert(id+"|"+showError+"|"+showType+"110") var br =null; if (showError !="alert") ...{ br ="<br />"; }else...{ br =""; } var errorStrArray = []; var ret =false; var formObj = document.getElementById(id); ////alert("formObj.tagName is "+formObj.getTagName()) formObj=document.getElementById(FormToChk); //alert("ok") var fields = fform.getFields(); //alert("fields.length="+fields.length) var rightnum =0; for (var i =0; i < fields.length; i++) ...{ //alert(fields[i]) var retVal = ValidationFramework.validateField(fields[i]); var fo=formObj[fields[i].getName()]; //alert(fo+"|fields[i].getName()="+fields[i].getName()) if (typeof (fo) !='undefined'&& fo !=null&& typeof(fo.type) !="undefined") ...{ fo.style.cssText =""; } if (retVal !="OK") ...{ errorStrArray[errorStrArray.length] = retVal; failFields[failFields.length] = formObj[fields[i].getName()]; }else...{ rightnum ++; } } if (rightnum == fields.length) ...{ ret =true; } if (errorStrArray.length >0) ...{ if (showError =="alert") ...{ if (showType =="first") ...{ alert(errorStrArray[0]); }else...{ alert(errorStrArray.join(br)); } }elseif(showError =="errorDiv") ...{ AddtionDOMName=AddtionErrorDOMName ||"" showError=showError+AddtionDOMName for(var i=0;i<failFields.length;i++)...{ var errObj = document.getElementById(showError+failFields[i].name); errObj.innerHTML = errorStrArray[i]; } }else...{ AddtionDOMName=AddtionErrorDOMName ||"" showError=showError+AddtionDOMName var errObj = document.getElementById(showError); if (showType =="first") ...{ errObj.innerHTML = errorStrArray[0]; }else...{ errObj.innerHTML = errorStrArray.join(br); } } if (typeof (failFields[0]) !='undefined'&& failFields[0] !=null&& typeof(failFields[0].type) !="undefined") ...{ failFields[0].focus(); } for (var i =0; i < failFields.length; i++) ...{ var o = failFields[i]; if ( typeof (o) !='undefined'&& o !=null&&typeof(o.type) !="undefined") ...{ o.style.cssText = ValidationFailCssStyle; } } } return ret; } /**//** * Validation the field * @param filed the field you want to validate. */ ValidationFramework.validateField =function(field) ...{ var depends = field.getDepends(); var retStr ="OK"; //alert("depends.length="+depends.length) for (var i =0; i < depends.length; i++) ...{ //alert(field+"|"+depends[i]+"<------") if (!ValidationFramework.validateDepend(field, depends[i])) ...{ //alert("There foudn an error") retStr = ValidationFramework.getErrorString(field, depends[i]); return retStr; //Break; }else...{ //alert("Rule "+i+" passed") } } return retStr; } /**//** * Validate the field depend. * This function dispatch the various depends into ValidateMethodFactory.validateXXX */ ValidationFramework.validateDepend =function(field, depend) ...{ //alert("depend.getName()="+depend.getName()) if (depend.getName() =="required") ...{ return ValidateMethodFactory.validateRequired(field, depend.getParams()); }elseif (depend.getName() =="integer") ...{ return ValidateMethodFactory.validateInteger(field, depend.getParams()); }elseif (depend.getName() =="double") ...{ return ValidateMethodFactory.validateDouble(field, depend.getParams()); }elseif (depend.getName() =="commonChar") ...{ return ValidateMethodFactory.validateCommonChar(field, depend.getParams()); }elseif (depend.getName() =="chineseChar") ...{ return ValidateMethodFactory.validateChineseChar(field, depend.getParams()); }elseif (depend.getName() =="minLength") ...{ return ValidateMethodFactory.validateMinLength(field, depend.getParams()); }elseif (depend.getName() =="maxLength") ...{ return ValidateMethodFactory.validateMaxLength(field, depend.getParams()); }elseif (depend.getName() =="email") ...{ return ValidateMethodFactory.validateEmail(field, depend.getParams()); }elseif (depend.getName() =="date") ...{ return ValidateMethodFactory.validateDate(field, depend.getParams()); }elseif (depend.getName() =="time") ...{ return ValidateMethodFactory.validateTime(field, depend.getParams()); }elseif (depend.getName() =="mask") ...{ return ValidateMethodFactory.validateMask(field, depend.getParams()); }elseif (depend.getName() =="integerRange") ...{ return ValidateMethodFactory.validateIntegerRange(field, depend.getParams()); }elseif (depend.getName() =="doubleRange") ...{ return ValidateMethodFactory.validateDoubleRange(field, depend.getParams()); }elseif (depend.getName() =="equalsField") ...{ return ValidateMethodFactory.validateEqualsField(field, depend.getParams()); }elseif (depend.getName() =="numberrange") ...{ return ValidateMethodFactory.validateNumberRange(field, depend.getParams()); }else...{ ValidationFramework.exception("Hasn't implemented that depend: "+ depend.getName()); returnfalse; } } // hold the current config file var _validationConfigFile =""; ValidationFramework.getDocumentElement =function() ...{ if (ValidationFramework._validationCache !=null) ...{ return ValidationFramework._validationCache; } //path=window.location.pathname.substr(0,window.location.pathname.lastIndexOf("/")) var file =""; if (_validationConfigFile !="") ...{ if(window.location.protocol=="http:")...{ file = window.location.protocol+"//"+window.location.host+"/"+_validationConfigFile; }else...{ file =_validationConfigFile; } }else...{ file = ValidationRoot +"validation-config.xml"; } var xmlDoc; if(window.ActiveXObject) ...{ xmlDoc =new ActiveXObject('Microsoft.XMLDOM'); xmlDoc.async =false; xmlDoc.setProperty("ServerHTTPRequest",true); //xmlDoc.setRequestHeader("If-Modified-Since","0"); xmlDoc.load(file); if (xmlDoc.parseError.errorCode!=0) ...{ var error = xmlDoc.parseError; ValidationFramework.exception(error.reason) returnfalse; } if (xmlDoc.documentElement ==null) ...{ ValidationFramework.exception("Configure Error, please check!"); returnnull; } } elseif (document.implementation&&document.implementation.createDocument) ...{ xmlDoc = document.implementation.createDocument('', '', null); xmlDoc.async =false; // Damn!!! it cost me half an hour to fix it! xmlDoc.load(file); if(xmlDoc.documentElement.nodeName=='parsererror')...{ ValidationFramework.exception(xmlDoc.documentElement.textContent) returnnull; } } else ...{ XMLMSG='Sorry, your browser doesn't support XML.' alert(XMLMSG); returnfalse; } // TODO: parse the document if it's a valid document. ValidationFramework._validationCache = xmlDoc.documentElement; //alert("xmlDoc.documentElement:"+xmlDoc.documentElement+"|"+typeof(xmlDoc.documentElement)) //alert("ValidationFramework._validationCache:"+ValidationFramework._validationCache +typeof(ValidationFramework._validationCache)) var lang=ValidationFramework._validationCache.getAttribute("lang"); //alert(lang) ValidationFramework._userLanguage = (lang==null) ?"auto" : lang; return ValidationFramework._validationCache; } ValidationFramework.init =function(configFile) ...{ _validationConfigFile = configFile; var configdocument=ValidationFramework.getDocumentElement(); //alert("configdocument="+configdocument+"|"+typeof(configdocument)) } ValidationFramework.getAllForms =function() ...{ var vforms = []; var root = ValidationFramework.getDocumentElement(); if (root !=null) ...{ var fs = root.childNodes; for (var i =0;i < fs.length ;i++ ) ...{ vforms[i] =new ValidationForm(fs.item(i)); } } return vforms; } ValidationFramework.getErrorString =function(field, depend) ...{ var stringResource =null; var lang = ValidationFramework._userLanguage.toLowerCase(); //if lang == auto, get the user's browser language. if (lang =="auto") ...{ // different browser has the different method the get the // user's language. so this is a stupid way to detect the // most common browser IE and Mozilla. if (typeof navigator.userLanguage =='undefined') lang = navigator.language.toLowerCase(); else lang = navigator.userLanguage.toLowerCase(); } // get the language if (typeof ValidationErrorString[lang] !='object') ...{ stringResource = ValidationErrorString['zh-cn']; }else...{ stringResource = ValidationErrorString[lang]; } var dep = depend.getName().toLowerCase(); var retStr = stringResource[dep]; //If the specified depend not defined, use the default error string. if (typeof retStr !='string') ...{ retStr = stringResource["default"];///////////////////////////////////////////////////// disp_field_str=ValidationErrorString[field.getDisplayName()]||field.getDisplayName() retStr = retStr.replace("{0}", disp_field_str); return retStr; } disp_field_str=ValidationErrorString[field.getDisplayName()]||field.getDisplayName() retStr = retStr.replace("{0}", disp_field_str); if (dep =="minlength"|| dep =="maxlength"|| dep =="date" ) ...{ disp_field_str=ValidationErrorString[depend.getParams()[0]]||depend.getParams()[0] retStr = retStr.replace("{1}", depend.getParams()[0]); }elseif ( dep =="equalsfield") ...{ var eqField = field.getForm().findField(depend.getParams()[0]); if (eqField ==null) ...{ ValidationFramework.exception("Cann't find the filed which name is ["+ depend.getParams()[0]+"], please check the xml configure file."); retStr ="<<Conifgure Error>>"; }else...{ disp_field_str=ValidationErrorString[field.getForm().findField(depend.getParams()[0]).getDisplayName()]||field.getForm().findField(depend.getParams()[0]).getDisplayName() retStr = retStr.replace("{1}", disp_field_str); } }elseif (dep =="integerrange"|| dep =="doublerange"|| dep =="numberrange") ...{ disp_field_str=ValidationErrorString[depend.getParams()[0]]||depend.getParams()[0] retStr = retStr.replace("{1}", disp_field_str); disp_field_str=ValidationErrorString[depend.getParams()[1]]||depend.getParams()[1] retStr = retStr.replace("{2}", disp_field_str); } return retStr; } ValidationFramework.getWebFormFieldObj =function(field) ...{ var obj =null; if (ValidationFramework._currentForm !=null) ...{ var formObj = document.getElementById(ValidationFramework._currentForm.getId()); try...{ obj = formObj[field.getName()]; }catch(e)...{ formObj = document.getElementById(FormToChk); obj = formObj[field.getName()]; } if (typeof(obj) =='undefined') ...{ obj =null; } }else...{ //alert("ValidationFramework._currentForm === null") } if (obj ==null) ...{ ValidationFramework.exception("Can not find form filed which name is ["+ field.getName() +"."); } return obj; } ValidationFramework.exception =function(str) ...{ var ex ="JavaScript Validation Framework runtime error: "; ex += str; ex +=" Any runtime error will cause the validation failure."; alert(ex); } ValidationFramework.getIntegerValue =function(val) ...{ var intvalue = parseInt(val); if (isNaN(intvalue)) ...{ ValidationFramework.exception("Expect an integer."); } return intvalue; } ValidationFramework.getFloatValue =function(val) ...{ var floatvalue = parseFloat(val); if (isNaN(floatvalue)) ...{ ValidationFramework.exception("Expect a float number."); } return floatvalue; } /**//** * FormFactory * Build virture form from Html Form. */ function FormFactory() ...{} FormFactory.getFormFromDOM =function(dom) ...{ var form =new ValidationForm(); form.setId(dom.getAttribute("id")); form.setShowError(dom.getAttribute("show-error")); form.setOnFail(dom.getAttribute("onfail")); form.setShowType(dom.getAttribute("show-type")); if (dom.hasChildNodes()) ...{ var f = dom.childNodes; for (var i =0; i < f.length; i++) ...{ if (f.item(i) ==null||typeof(f.item(i).tagName) =='undefined'|| f.item(i).tagName !='field') ...{ continue; } var field = FieldFactory.getFieldFromDOM(f.item(i)); if (field !=null) ...{ form.addField(field); } } } return form; } /// Get the Form from ID FormFactory.getFormFromId =function(id) ...{ var root = ValidationFramework.getDocumentElement(); if ( root ==null|| (!root.hasChildNodes()) ) returnnull; var vforms = root.childNodes; if(vforms.length<2)...{//如果配置xml文档只有一个配置表单 var f =document.all?vforms.item(0):vforms[i]; return FormFactory.getFormFromDOM(f); }else...{ if(!document.all)...{//Firefox will give three elements though there's only one form. var tmp=[]; for (var i =0; i < vforms.length; i++) ...{//The one which's tagname is not empty is we need var f = vforms.item(i); if(typeof(f.tagName) !='undefined'&&f.tagName =='form')...{ tmp[tmp.length]=f; } } vforms= tmp; if(vforms.length<2)...{ var f = vforms[0]; return FormFactory.getFormFromDOM(f); } } for (var i =0; i < vforms.length; i++) ...{ var f =document.all?vforms.item(0):vforms[i]; if (typeof(f.tagName) !='undefined'&& f.tagName =='form'&& f.getAttribute("id") == id) ...{ return FormFactory.getFormFromDOM(f); }else...{ //alert(f.getAttribute("id") +"|"+id+"|"+f.tagName) } } } alert('The setting for the form('+id+') to be checked was not found!'); returnnull; } /**//** * A validation form object. */ function ValidationForm() ...{ this._fields = []; this._id =null; this._showError =null; this._onFail =null; this._showType =null; this.getFields =function() ...{ returnthis._fields; } this.setFields =function(p0) ...{ this._fields = p0; } this.getId =function() ...{ returnthis._id; } this.setId =function(p0) ...{ this._id = p0; } this.getShowError =function() ...{ returnthis._showError; } this.setShowError =function(p0) ...{ this._showError = p0; } this.getShowType =function() ...{ returnthis._showType; } this.setShowType =function(p0) ...{ this._showType = p0; } this.getOnFail =function() ...{ returnthis._onFail; } this.setOnFail =function(p0) ...{ this._onFail = p0; } // find field by it's name this.findField =function(p0) ...{ for (var i =0; i <this._fields.length; i++) ...{ if (this._fields[i].getName() == p0) ...{ returnthis._fields[i]; } } returnnull; } this.addField =function(p0) ...{ this._fields[this._fields.length] = p0; p0.setForm(this); } } /**//** * A form filed. virtual. */ function ValidationField() ...{ this._name =null; this._depends = []; this._displayName =null; this._onFail =null; this._form =null; this.getName =function() ...{ returnthis._name; } this.setName =function(p0) ...{ this._name = p0; } this.getDepends =function() ...{ returnthis._depends; } this.setDepends =function(p0) ...{ this._depends = p0; } this.getDisplayName =function() ...{ returnthis._displayName; } this.setDisplayName =function(p0) ...{ this._displayName = p0; } this.getOnFail =function() ...{ returnthis._onFail; } this.setOnFail =function(p0) ...{ this._onFail = p0; } this.getForm =function() ...{ returnthis._form; } this.setForm =function(p0) ...{ this._form = p0; } this.addDepend =function(p0) ...{ this._depends[this._depends.length] = p0; } } ///Factory methods for create Field function FieldFactory() ...{} FieldFactory.getFieldFromDOM =function(dom) ...{ var field =new ValidationField(); field.setName(dom.getAttribute("name")); field.setDisplayName(dom.getAttribute("display-name")); field.setOnFail(dom.getAttribute("onfail")); if (dom.hasChildNodes()) ...{ var depends = dom.childNodes; for (var i =0; i < depends.length; i++) ...{ var item = depends.item(i); if (typeof(item.tagName) =='undefined'|| item.tagName !='depend') ...{ continue; } var dp =new ValidationDepend(); dp.setName(item.getAttribute("name")); dp.addParam(item.getAttribute("param0")); dp.addParam(item.getAttribute("param1")); dp.addParam(item.getAttribute("param2")); dp.addParam(item.getAttribute("param3")); dp.addParam(item.getAttribute("param4")); field.addDepend(dp); } } return field; } function FormFieldUtils() ...{} FormFieldUtils.findField =function(formName, fieldName) ...{ var formArr = ValidationFramework.getAllForms(); var theForm =null; for (var i =0; i < formArr.length; i++) ...{ if (formArr[i].getName() == formName) ...{ theForm = formArr[i]; } } if (theForm !=null) ...{ return theForm.findField(fieldName); }else...{ returnnull; } } /**//** * A validaton depend. */ function ValidationDepend() ...{ this._name =null; this._params = []; this.getName =function() ...{ returnthis._name; } this.setName =function(p0) ...{ this._name = p0; } this.getParams =function() ...{ returnthis._params; } this.setParams =function(p0) ...{ this.params = p0; } this.addParam =function(p0) ...{ this._params[this._params.length] = p0; } } function ValidateMethodFactory() ...{} ValidateMethodFactory._methods = []; ValidateMethodFactory.validateRequired =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (typeof(obj.type) =="undefined") ...{ var tmp =0; for (var i =0; i < obj.length; i++) ...{ if (obj[i].checked) ...{ returntrue; } } returnfalse; } if (obj.type =="checkbox"|| obj.type =="radio") ...{ return (obj.checked); }else...{ return!(obj.value ==""); } } ValidateMethodFactory.validateInteger =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var exp =new RegExp("^-?/d+$"); return exp.test(obj.value); } ValidateMethodFactory.validateDouble =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var exp =new RegExp("^-?/d+./d+$"); return exp.test(obj.value); } ValidateMethodFactory.validateCommonChar =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var exp =new RegExp("^[A-Za-z0-9_]*$"); return exp.test(obj.value); } ValidateMethodFactory.validateChineseChar =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var exp =new RegExp("^[一-龥豈-鶴]*$"); return exp.test(obj.value); } ValidateMethodFactory.validateMinLength =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; var v = ValidationFramework.getIntegerValue(params[0]); return (obj.value.length >= v); } ValidateMethodFactory.validateMaxLength =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; var v = ValidationFramework.getIntegerValue(params[0]); return (obj.value.length <= v); } ValidateMethodFactory.validateEmail =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; return ValidateMethodFactory.__checkEmail(obj.value); } ValidateMethodFactory.validateDate =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var value = obj.value; var datePattern = params[0]; var MONTH ="mm"; var DAY ="dd"; var YEAR ="yyyy"; var orderMonth = datePattern.indexOf(MONTH); var orderDay = datePattern.indexOf(DAY); var orderYear = datePattern.indexOf(YEAR); var bValid =true; var dateRegexp =null; if ((orderDay < orderYear && orderDay > orderMonth)) ...{ var iDelim1 = orderMonth + MONTH.length; var iDelim2 = orderDay + DAY.length; var delim1 = datePattern.substring(iDelim1, iDelim1 +1); var delim2 = datePattern.substring(iDelim2, iDelim2 +1); if (iDelim1 == orderDay && iDelim2 == orderYear) ...{ dateRegexp =new RegExp("^(/d{2})(/d{2})(/d{4})$"); }elseif (iDelim1 == orderDay) ...{ dateRegexp =new RegExp("^(/d{2})(/d{2})["+ delim2 +"](/d{4})$"); }elseif (iDelim2 == orderYear) ...{ dateRegexp =new RegExp("^(/d{2})["+ delim1 +"](/d{2})(/d{4})$"); }else...{ dateRegexp =new RegExp("^(/d{2})["+ delim1 +"](/d{2})["+ delim2 +"](/d{4})$"); } var matched = dateRegexp.exec(value); if(matched !=null) ...{ if (!ValidateMethodFactory.__isValidDate(matched[2], matched[1], matched[3])) ...{ bValid =false; } }else...{ bValid =false; } }elseif ((orderMonth < orderYear && orderMonth > orderDay)) ...{ var iDelim1 = orderDay + DAY.length; var iDelim2 = orderMonth + MONTH.length; var delim1 = datePattern.substring(iDelim1, iDelim1 +1); var delim2 = datePattern.substring(iDelim2, iDelim2 +1); if (iDelim1 == orderMonth && iDelim2 == orderYear) ...{ dateRegexp =new RegExp("^(/d{2})(/d{2})(/d{4})$"); }elseif (iDelim1 == orderMonth) ...{ dateRegexp =new RegExp("^(/d{2})(/d{2})["+ delim2 +"](/d{4})$"); }elseif (iDelim2 == orderYear) ...{ dateRegexp =new RegExp("^(/d{2})["+ delim1 +"](/d{2})(/d{4})$"); }else...{ dateRegexp =new RegExp("^(/d{2})["+ delim1 +"](/d{2})["+ delim2 +"](/d{4})$"); } var matched = dateRegexp.exec(value); if(matched !=null) ...{ if (!ValidateMethodFactory.__isValidDate(matched[1], matched[2], matched[3])) ...{ bValid =false; } }else...{ bValid =false; } }elseif ((orderMonth > orderYear && orderMonth < orderDay)) ...{ var iDelim1 = orderYear + YEAR.length; var iDelim2 = orderMonth + MONTH.length; var delim1 = datePattern.substring(iDelim1, iDelim1 +1); var delim2 = datePattern.substring(iDelim2, iDelim2 +1); if (iDelim1 == orderMonth && iDelim2 == orderDay) ...{ dateRegexp =new RegExp("^(/d{4})(/d{2})(/d{2})$"); }elseif (iDelim1 == orderMonth) ...{ dateRegexp =new RegExp("^(/d{4})(/d{2})["+ delim2 +"](/d{2})$"); }elseif (iDelim2 == orderDay) ...{ dateRegexp =new RegExp("^(/d{4})["+ delim1 +"](/d{2})(/d{2})$"); }else...{ dateRegexp =new RegExp("^(/d{4})["+ delim1 +"](/d{2})["+ delim2 +"](/d{2})$"); } var matched = dateRegexp.exec(value); if(matched !=null) ...{ if (!ValidateMethodFactory.__isValidDate(matched[3], matched[2], matched[1])) ...{ bValid =false; } }else...{ bValid =false; } }else...{ bValid =false; } return bValid; } ValidateMethodFactory.validateTime =function(field, params) ...{ ////NOT IMPLEMENT YET SINCE IT'S NOT USEFUL. returntrue; } ValidateMethodFactory.validateMask =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var exp =new RegExp(params[0]); //FIXME: this method may be buggy, need more test. return exp.test(obj.value); } ValidateMethodFactory.validateIntegerRange =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var p0 = ValidationFramework.getIntegerValue(params[0]); var p1 = ValidationFramework.getIntegerValue(params[1]); if (ValidateMethodFactory.validateInteger(field)) ...{ var v = parseInt(obj.value); return (v >= p0 && v <= p1); }else...{ returnfalse; } returntrue; } ValidateMethodFactory.validateDoubleRange =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var p0 = ValidationFramework.getFloatValue(params[0]); var p1 = ValidationFramework.getFloatValue(params[1]); if (ValidateMethodFactory.validateInteger(field) || ValidateMethodFactory.validateDouble(field)) ...{ var v = parseFloat(obj.value); return (v >= p0 && v <= p1); }else...{ returnfalse; } returntrue; } ValidateMethodFactory.validateEqualsField =function(field, params) ...{ var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; var formObj = document.getElementById(ValidationFramework._currentForm.getId()); try...{ var eqField = formObj[params[0]]; }catch(e)...{ formObj = document.getElementById(FormToChk); var eqField = formObj[params[0]]; } if (eqField !=null) ...{ return (obj.value == eqField.value) }else...{ returnfalse; } } ValidateMethodFactory.validateNumberRange =function(field, params) ...{//by lein var obj = ValidationFramework.getWebFormFieldObj(field); if (obj ==null) returnfalse; if (obj.value =="") returntrue; var p0 = ValidationFramework.getIntegerValue(params[0]); var p1 = ValidationFramework.getIntegerValue(params[1]); var v = parseFloat(obj.value); if(isNaN(v)||v.length<1)...{ returnfalse } return (v >= p0 && v <= p1); } ValidateMethodFactory.__isValidDate =function(day, month, year) ...{ if (month <1|| month >12) returnfalse; if (day <1|| day >31) returnfalse; if ((month ==4|| month ==6|| month ==9|| month ==11) &&(day ==31)) returnfalse; if (month ==2) ...{ var leap = (year %4==0&& (year %100!=0|| year %400==0)); if (day>29|| (day ==29&&!leap)) returnfalse; } returntrue; } /**//** * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com), * http://javascript.internet.com */ ValidateMethodFactory.__checkEmail =function(emailStr) ...{ if (emailStr.length ==0) ...{ returntrue; } var emailPat=/^(.+)@(.+)$/; var specialChars="/(/)<>@,;:///"/./[/]"; var validChars="[^/s"+ specialChars +"]"; var quotedUser="("[^"]*")"; var ipDomainPat=/^(d...{1,3})[.](d...{1,3})[.](d...{1,3})[.](d...{1,3})$/; var atom=validChars +'+'; var word="("+ atom +"|"+ quotedUser +")"; var userPat=new RegExp("^"+ word +"(/."+ word +")*$"); var domainPat=new RegExp("^"+ atom +"(/."+ atom +")*$"); var matchArray=emailStr.match(emailPat); if (matchArray ==null) ...{ returnfalse; } var user=matchArray[1]; var domain=matchArray[2]; if (user.match(userPat) ==null) ...{ returnfalse; } var IPArray = domain.match(ipDomainPat); if (IPArray !=null) ...{ for (var i =1; i <=4; i++) ...{ if (IPArray[i] >255) ...{ returnfalse; } } returntrue; } var domainArray=domain.match(domainPat); if (domainArray ==null) ...{ returnfalse; } var atomPat=new RegExp(atom,"g"); var domArr=domain.match(atomPat); var len=domArr.length; if ((domArr[domArr.length-1].length <2) || (domArr[domArr.length-1].length >3)) ...{ returnfalse; } if (len <2) ...{ returnfalse; } returntrue; } ////Language Definitions var ValidationErrorString =new Object(); ////Simplified Chinese(zh-ch) ValidationErrorString["zh-cn"] =new Object(); ValidationErrorString["zh-cn"]["default"]="域{0}校验失败。"; ValidationErrorString["zh-cn"]["required"]="{0}不能为空。"; ValidationErrorString["zh-cn"]["integer"]="{0}必须是一个整数。"; ValidationErrorString["zh-cn"]["double"]="{0}必须是一个浮点数(带小数点)。"; ValidationErrorString["zh-cn"]["commonchar"] ="{0}必须是普通英文字符:字母,数字和下划线。"; ValidationErrorString["zh-cn"]["chinesechar"] ="{0}必须是中文字符。"; ValidationErrorString["zh-cn"]["minlength"]="{0}长度不能小于{1}个字符。"; ValidationErrorString["zh-cn"]["maxlength"]="{0}长度不能大于{1}个字符。" ; ValidationErrorString["zh-cn"]["invalid"]="{0}无效。"; ValidationErrorString["zh-cn"]["date"]="{0}不是一个有效日期,期待格式:{1}。"; ValidationErrorString["zh-cn"]["integerrange"]="{0}必须在整数{1}和{2}之间。"; ValidationErrorString["zh-cn"]["doublerange"]="{0}必须在浮点数{1}和{2}之间。"; ValidationErrorString["zh-cn"]["pid"]="{0}不是一个有效身份证号。"; ValidationErrorString["zh-cn"]["email"]="{0}不是一个有效的Email。"; ValidationErrorString["zh-cn"]["equalsfield"]="{0}必须和{1}一致。"; ValidationErrorString["zh-cn"]["numberrange"]="{0}必须在数值{1}和{2}之间。"; ////English(en-us) ValidationErrorString["en-us"] =new Object(); ValidationErrorString["en-us"]["default"]="Failed when validating filed {0}."; ValidationErrorString["en-us"]["required"]="{0} is required."; ValidationErrorString["en-us"]["integer"]="{0} must be a integer."; ValidationErrorString["en-us"]["double"]="{0} must be a double value. "; ValidationErrorString["en-us"]["commonchar"] ="{0} should be common ascii characters, A-Z,a-z and undercore. "; ValidationErrorString["en-us"]["chinesechar"] ="{0} must be chinese characters. "; ValidationErrorString["en-us"]["minlength"]="{0} cannot be less then {1}. "; ValidationErrorString["en-us"]["maxlength"]="{0} cannot be more then {1}. "; ValidationErrorString["en-us"]["invalid"]="{0} in invalid. "; ValidationErrorString["en-us"]["date"]="{0} is not an invalid date format: {1}. "; ValidationErrorString["en-us"]["integerrange"]="{0} should be between number {1} and {2}. "; ValidationErrorString["en-us"]["doublerange"]="{0} should be between double {1} and {2}. "; ValidationErrorString["en-us"]["pid"]="{0} is not an valid pid. "; ValidationErrorString["en-us"]["email"]="{0} is not an valid email address. "; ValidationErrorString["en-us"]["equalsfield"]="{0} should be agree with field {1}. "; ValidationErrorString["en-us"]["numberrange"]="{0} should be between number {1} and {2}. "; ValidationErrorString["zh-big5"] =new Object(); ValidationErrorString["zh-big5"]["default"]="域{0}校驗失敗。"; ValidationErrorString["zh-big5"]["required"]="{0}不能為空。"; ValidationErrorString["zh-big5"]["integer"]="{0}必須是一個整數。"; ValidationErrorString["zh-big5"]["double"]="{0}必須是一個浮點數(帶小數點)。"; ValidationErrorString["zh-big5"]["commonchar"] ="{0}必須是普通英文字元:字母,數位和下劃線。"; ValidationErrorString["zh-big5"]["chinesechar"] ="{0}必須是中文字元。"; ValidationErrorString["zh-big5"]["minlength"]="{0}長度不能小於{1}個字元。"; ValidationErrorString["zh-big5"]["maxlength"]="{0}長度不能大於{1}個字元。" ; ValidationErrorString["zh-big5"]["invalid"]="{0}無效。"; ValidationErrorString["zh-big5"]["date"]="{0}不是一個有效日期,期待格式:{1}。"; ValidationErrorString["zh-big5"]["integerrange"]="{0}必須在整數{1}和{2}之間。"; ValidationErrorString["zh-big5"]["doublerange"]="{0}必須在浮點數{1}和{2}之間。"; ValidationErrorString["zh-big5"]["pid"]="{0}不是一個有效身份證號。"; ValidationErrorString["zh-big5"]["email"]="{0}不是一個有效的Email。"; ValidationErrorString["zh-big5"]["equalsfield"]="{0}必須和{1}一致。"; ValidationErrorString["zh-big5"]["numberrange"]="{0}必須在數值{1}和{2}之間。"; // preload the validation file. //ValidationFramework.getDocumentElement();