// Javascript form validation routines. // Author: Stephen Poley // http://www.xs4all.nl/~sbpoley/webmatters/formval.html#example // All validation routines return true if executed by an older browser: // in this case validation must be left to the server. // // Update Jun 2005: discovered that reason IE wasn't setting focus was // due to an IE timing bug. Added 0.1 sec delay to fix. var nbsp = 160; // non-breaking space char var node_text = 3; // DOM text node-type var emptyString = /^\s*$/ var glb_vfld; // retain vfld for timer thread //--- Trim leading/trailing whitespace off string function trim(str) { return str.replace(/^\s+|\s+$/g, '') }; //--- setfocus - Delayed focus setting to get around IE bug function setFocusDelayed() { glb_vfld.focus(); } function setfocus(vfld) { // save vfld in global variable so value retained when routine exits glb_vfld = vfld; setTimeout( 'setFocusDelayed()', 100 ); } //--- msg --- // Display warn/error message in HTML element // commonCheck routine must have previously been called function msg(fld, // id of element to display message in msgtype, // class to give element ("warn" or "error") message) // string to display { var dispmessage; if (emptyString.test(message)) dispmessage = String.fromCharCode(nbsp); else dispmessage = message; var elem = document.getElementById(fld); elem.firstChild.nodeValue = dispmessage; elem.className = msgtype; // set the CSS class of message }; //--- commonCheck --- // Common code for all validation routines to: // (a) check for older / less-equipped browsers // (b) check if empty fields are required // Returns true (validation passed), // false (validation failed) or // proceed (don't know yet) var proceed = 2; function commonCheck (vfld, // element to be validated ifld, // id of element to receive info/error msg reqd) // true if required { if (!document.getElementById) return true; // not available on this browser - leave validation to the server var elem = document.getElementById(ifld); if (!elem.firstChild) return true; // not available on this browser if (elem.firstChild.nodeType != node_text) return true; // ifld is wrong type of node if (emptyString.test(vfld.value)) { if (reqd) { msg (ifld, "error", "ERROR: required"); setfocus(vfld); return false; } else { msg (ifld, "msg", ""); // OK return true; } } return proceed; } //--- validatePresent --- // Validate if something has been entered // Returns true if so function validatePresent(vfld, // element to be validated ifld ) // id of element to receive info/error msg { var stat = commonCheck (vfld, ifld, true); if (stat != proceed) return stat; msg (ifld, "msg", ""); // OK return true; }; //--- validateEmail --- // Validate if e-mail address // Returns true if so (and also if could not be executed because of old browser) function validateEmail (vfld, // element to be validated ifld, // id of element to receive info/error msg reqd) // true if required { var stat = commonCheck (vfld, ifld, reqd); if (stat != proceed) return stat; var tfld = trim(vfld.value); // value of field with whitespace trimmed off var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/ if (!email.test(tfld)) { msg (ifld, "error", "ERROR: not a valid e-mail address"); setfocus(vfld); return false; } var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/ if (!email2.test(tfld)) msg (ifld, "warn", "Unusual e-mail address - check if correct"); else msg (ifld, "warn", ""); msg (ifld, "msg", ""); // OK return true; }; //--- validateURL --- function validateURL (vfld, // element to be validated ifld, // id of element to receive info/error msg reqd) // true if required { var stat = commonCheck (vfld, ifld, reqd); if (stat != proceed) return stat; var tfld = trim(vfld.value); // value of field with whitespace trimmed off var URL = /^(http|https):\/\//; if (!URL.test(tfld)) { msg (ifld, "error", "ERROR: not a valid URL, http:// req'd"); setfocus(vfld); return false; } msg (ifld, "msg", ""); // OK return true; } //--- validateTelnr --- // Validate telephone number // Returns true if so (and also if could not be executed because of old browser) // Permits spaces, hyphens, brackets and leading + function validateTelnr (vfld, // element to be validated ifld, // id of element to receive info/error msg reqd) // true if required { var stat = commonCheck (vfld, ifld, reqd); if (stat != proceed) return stat; var tfld = trim(vfld.value); // value of field with whitespace trimmed off var telnr = /^\+?[0-9 ()-]+[0-9]$/ if (!telnr.test(tfld)) { msg (ifld, "error", "ERROR: not a valid telephone number. Characters permitted are digits, space ()- and leading +"); setfocus(vfld); return false; } var numdigits = 0; for (var j=0; j='0' && tfld.charAt(j)<='9') numdigits++; if (numdigits<6) { msg (ifld, "error", "ERROR: " + numdigits + " digits - too short"); setfocus(vfld); return false; } if (numdigits>14) msg (ifld, "warn", numdigits + " digits - check if correct"); else { if (numdigits<10) msg (ifld, "warn", "Only " + numdigits + " digits - check if correct"); else msg (ifld, "warn", ""); } msg (ifld, "msg", ""); // OK return true; }; //--- validateAge --- // Validate person's age // Returns true if OK function validateAge (vfld, // element to be validated ifld, // id of element to receive info/error msg reqd) // true if required { var stat = commonCheck (vfld, ifld, reqd); if (stat != proceed) return stat; var tfld = trim(vfld.value); var ageRE = /^[0-9]{1,3}$/ if (!ageRE.test(tfld)) { msg (ifld, "error", "ERROR: not a valid age"); setfocus(vfld); return false; } if (tfld>=200) { msg (ifld, "error", "ERROR: not a valid age"); setfocus(vfld); return false; } if (tfld>110) msg (ifld, "warn", "Older than 110: check correct"); else { if (tfld<7) msg (ifld, "warn", "Bit young for this, aren't you?"); else msg (ifld, "warn", ""); } msg (ifld, "msg", ""); // OK return true; }; // Author: Matt Kruse // WWW: http://www.mattkruse.com/ // Trim functions // Returns string with whitespace trimmed function LTrim(str){ if (str==null){return null;} for(var i=0;str.charAt(i)==" ";i++); return str.substring(i,str.length); } function RTrim(str){ if (str==null){return null;} for(var i=str.length-1;str.charAt(i)==" ";i--); return str.substring(0,i+1); } function Trim(str){return LTrim(RTrim(str));} function LTrimAll(str) { if (str==null){return str;} for (var i=0; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i++); return str.substring(i,str.length); } function RTrimAll(str) { if (str==null){return str;} for (var i=str.length-1; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i--); return str.substring(0,i+1); } function TrimAll(str) { return LTrimAll(RTrimAll(str)); } // isNull(value) // Returns true if value is null function isNull(val){return(val==null);} // isBlank(value) // Returns true if value only contains spaces function isBlank(val){ if(val==null){return true;} for(var i=0;i1){return false;} var string="1234567890"; if (string.indexOf(num)!=-1){return true;} return false; } // setNullIfBlank(input_object) // Sets a form field to "" if it isBlank() function setNullIfBlank(obj){if(isBlank(obj.value)){obj.value="";}} // setFieldsToUpperCase(input_object) // Sets value of form field toUpperCase() for all fields passed function setFieldsToUpperCase(){ for(var i=0;i1)?arguments[1]:""; var dofocus=(arguments.length>2)?arguments[2]:false; if (isBlank(getInputValue(obj))){ if(!isBlank(msg)){alert(msg);} if(dofocus){ if (isArray(obj) && (typeof(obj.type)=="undefined")) {obj=obj[0];} if(obj.type=="text"||obj.type=="textarea"||obj.type=="password") { obj.select(); } obj.focus(); } return true; } return false; } // disallowModify(input_object[,message[,true]]) // Checks a form field for a value different than defaultValue. // Optionally alerts and focuses function disallowModify(obj){ var msg=(arguments.length>1)?arguments[1]:""; var dofocus=(arguments.length>2)?arguments[2]:false; if (getInputValue(obj)!=getInputDefaultValue(obj)){ if(!isBlank(msg)){alert(msg);} if(dofocus){ if (isArray(obj) && (typeof(obj.type)=="undefined")) {obj=obj[0];} if(obj.type=="text"||obj.type=="textarea"||obj.type=="password") { obj.select(); } obj.focus(); } setInputValue(obj,getInputDefaultValue(obj)); return true; } return false; } // commifyArray(array[,delimiter]) // Take an array of values and turn it into a comma-separated string // Pass an optional second argument to specify a delimiter other than // comma. function commifyArray(obj,delimiter){ if (typeof(delimiter)=="undefined" || delimiter==null) { delimiter = ","; } var s=""; if(obj==null||obj.length<=0){return s;} for(var i=0;i0)?obj.options[obj.selectedIndex].value:null; case 'select-multiple': if (obj.options==null) { return null; } var values=new Array(); for(var i=0;i0)?obj.options[obj.selectedIndex].text:null; case 'select-multiple': if (obj.options==null) { return null; } var values=new Array(); for(var i=0;i2)?arguments[2]:false; if (isArray(obj) && (typeof(obj.type)=="undefined")) { var values=new Array(); for(var i=0;i2)?arguments[2]:false; if (isArray(obj) && (typeof(obj.type)=="undefined")) { var values=new Array(); for(var i=0;i1)?arguments[1]:false; if(isArray(obj)&&(typeof(obj.type)=="undefined")){ for(var i=0;i