function validateUSPhone( strValue ) { /************************************************ DESCRIPTION: Validates that a string contains valid US phone pattern. Ex. (999) 999-9999 or (999)999-9999 PARAMETERS: strValue - String to be tested for validity RETURNS: True if valid, otherwise false. *************************************************/ var objRegExp = /^\([1-9]\d{2}\)\d{3}\-\d{4}$/; // var objRegExp = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/; //remove possibility of space. //check for valid us phone with or without space between //area code return objRegExp.test(strValue); } function validateUSDate( strValue ) { /************************************************ DESCRIPTION: Validates that a string contains only valid dates with 2 digit month, 2 digit day, 4 digit year. Date separator can be ., -, or /. Uses combination of regular expressions and string parsing to validate date. Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy PARAMETERS: strValue - String to be tested for validity RETURNS: True if valid, otherwise false. REMARKS: Avoids some of the limitations of the Date.parse() method such as the date separator character. *************************************************/ var objRegExp = /^\d{2}(\/)\d{2}\1\d{4}$/ //var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ // allow only the / as the separator and 2 digits only //check to see if in correct format if(!objRegExp.test(strValue)) return false; //doesn't match pattern, bad date else{ var arrayDate = strValue.split(RegExp.$1); //split date into month, day, year var intDay = parseInt(arrayDate[1],10); var intYear = parseInt(arrayDate[2],10); var intMonth = parseInt(arrayDate[0],10); //check for valid month if(intMonth > 12 || intMonth < 1) { return false; } //create a lookup for months not equal to Feb. var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31, '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31} //check if month value and day value agree if(arrayLookup[arrayDate[0]] != null) { if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0) return true; //found in lookup table, good date } //check for February var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)); if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0) return true; //Feb. had valid number of days } return false; //any other values, bad date } /* This is the source code for the validation function. You can copy and paste the contents in to a file, say, gen_validation.js . Add the following code just after the in the files where the generalised validation functionality is required. The next two pages gives examples on using the funcions. */ /* * File : gen_validation.js * * Author : Prasanth M J * * Published at * CreativeProgrammers.com - The technical knowledge repository. * http://www.creativeprogrammers.com * * */ //---------------------------------EMail Check ------------------------------------ /* checks the validity of an email address entered * returns true or false * */ function validateEmail(email) { // a very simple email validation checking. // you can add more complex email checking if it helps var splitted = email.match("^(.+)@(.+)$"); if(splitted == null) return false; if(splitted[1] != null ) { var regexp_user=/^\"?[\w-_\.]*\"?$/; if(splitted[1].match(regexp_user) == null) return false; } if(splitted[2] != null) { var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/; if(splitted[2].match(regexp_domain) == null) { var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/; if(splitted[2].match(regexp_ip) == null) return false; }// if return true; } return false; } /* function validateData * Checks each field in a form * Called from validateForm function */ function validateData(strValidateStr,objValue,strError) { var epos = strValidateStr.search("="); var command = ""; var cmdvalue = ""; if(epos >= 0) { command = strValidateStr.substring(0,epos); cmdvalue = strValidateStr.substr(epos+1); } else { command = strValidateStr; } switch(command) { case "req": case "required": { if(eval(objValue.value.length) == 0) { if(!strError || strError.length ==0) { strError = objValue.name + " : Required Field"; }//if alert(strError); return false; }//if break; }//case required case "maxlength": case "maxlen": { if(eval(objValue.value.length) > eval(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name + " : "+cmdvalue+" characters maximum "; }//if alert(strError + "\n[Current length = " + objValue.value.length + " ]"); return false; }//if break; }//case maxlen case "minlength": case "minlen": { if(eval(objValue.value.length) < eval(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name + " : " + cmdvalue + " characters minimum "; }//if alert(strError + "\n[Current length = " + objValue.value.length + " ]"); return false; }//if break; }//case minlen case "alnum": case "alphanumeric": { var charpos = objValue.value.search("[^A-Za-z0-9]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only alpha-numeric characters allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//case alphanumeric case "num": case "numeric": { var charpos = objValue.value.search("[^0-9]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only digits allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//numeric case "alphabetic": case "alpha": { var charpos = objValue.value.search("[^A-Za-z]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only alphabetic characters allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//alpha case "email": { if(!validateEmail(objValue.value)) { if(!strError || strError.length ==0) { strError = objValue.name+": Enter a valid Email address "; }//if alert(strError); return false; }//if break; }//case email case "lt": case "lessthan": { if(isNaN(objValue.value)) { alert(objValue.name+": Should be a number "); return false; }//if if(eval(objValue.value) >= eval(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name + " : value should be less than "+ cmdvalue; }//if alert(strError); return false; }//if break; }//case lessthan case "gt": case "greaterthan": { if(isNaN(objValue.value)) { alert(objValue.name+": Should be a number "); return false; }//if if(eval(objValue.value) <= eval(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name + " : value should be greater than "+ cmdvalue; }//if alert(strError); return false; }//if break; }//case greaterthan case "regexp": { if(!objValue.value.match(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name+": Invalid characters found "; }//if alert(strError); return false; }//if break; }//case regexp case "dontselect": { if(objValue.selectedIndex == null) { alert("BUG: dontselect command for non-select Item"); return false; } if(objValue.selectedIndex == eval(cmdvalue)) { if(!strError || strError.length ==0) { strError = objValue.name+": Please Select one option "; }//if alert(strError); return false; } break; }//case dontselect case "dec": case "decimal": { var charpos = objValue.value.search("[^0-9.]"); if(objValue.value.length > 0 && charpos >= 0) { if(!strError || strError.length ==0) { strError = objValue.name+": Only digits and a decimal allowed "; }//if alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); return false; }//if break; }//decimal case "mdate": { if(!validateUSDate(objValue.value)) { if(!strError || strError.length ==0) { strError = objValue.name+": Enter a valid Date"; }//if alert(strError); return false; }//if break; }//case date case "phone": { if(!validateUSPhone(objValue.value)) { if(!strError || strError.length ==0) { strError = objValue.name+": Enter a valid Phone"; }//if alert(strError); return false; }//if break; }//case date }//switch return true; } /* * function validateForm * the function that can be used to validate any form * returns false if the validation fails; true if success * arguments : * objFrm : the form object * arrObjDesc : an array of objects describing the validations to conduct on each * input item. * The array should consist of one object per input item in the order the input * elements are present in the form. Each object consist of zero or more validation * objects. Each of these validation object is a pair consisting of the validation * descriptor string and an optional Error message. */ function validateForm(objFrm,arrObjDesc) { for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) { if(objFrm.elements.length <= itrobj) { alert("BUG: Obj descriptor for a non existent form element"); return false; }//if for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) { if(validateData(arrObjDesc[itrobj][itrdesc][0], objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false) { objFrm[itrobj].focus(); if (!objFrm[itrobj].selectedIndex) { objFrm[itrobj].select() } return false; }//if }//for }//for }