function Validator() {} var _incr = 1; Validator.HEX = 2 * _incr++; Validator.DIGIT = 2 * _incr++; Validator.DASH = 2 * _incr++; Validator.DOT = 2 * _incr++; Validator.UNDERSCORE = 2 * _incr++; Validator.PARENS = 2 * _incr++; Validator.COMMA = 2 * _incr++; Validator.QUESTIONMARK = 2 * _incr++; Validator.SPACE = 2 * _incr++; Validator.LETTER = 2 * _incr++; Validator.NAVCHAR = 2 * _incr++; Validator.DOUBLEQUOTE = 2 * _incr++; Validator.ASTERISK = 2 * _incr++; Validator.CheckItem = function(type, allowed) { this.type = type; this.allowed = allowed; } Validator.isValid = function(eventObj, checkItemArray) { var retVal = false; var allFalse = true; for (var i=0; i < checkItemArray.length; i++) { var allowed = true; var item = checkItemArray[i]; if (typeof(item) == "object") { var type = item.type; allowed = item.allowed; } else { if (item < 0) { allowed = false; item = Math.abs(item); } var type = item; } allFalse = (allFalse && !allowed); var c = getC(eventObj); switch (type) { case Validator.HEX: retVal = (isHex(eventObj, false) == allowed); break; case Validator.DIGIT: retVal = (isDigitCheckNavChars(eventObj, false) == allowed); break; case Validator.DASH: retVal = (isDash(eventObj) == allowed); break; case Validator.DOT: retVal = (isDot(eventObj) == allowed); break; case Validator.UNDERSCORE: retVal = ((c == "_".charCodeAt(0)) == allowed); break; case Validator.PARENS: retVal = (isParens(eventObj) == allowed); break; case Validator.COMMA: retVal = (isComma(eventObj) == allowed); break; case Validator.QUESTIONMARK: retVal = (isQuestionMark(eventObj) == allowed); break; case Validator.ASTERISK: retVal = (isAsterisk(eventObj) == allowed); break; case Validator.SPACE: retVal = (isSpace(eventObj) == allowed); break; case Validator.LETTER: retVal = (isLetterCheckNavChars(eventObj, false) == allowed); break; case Validator.DOUBLEQUOTE: retVal = ((c == "\"".charCodeAt(0)) == allowed); break; case Validator.NAVCHAR: retVal = (isNavChar(eventObj) == allowed); break; } if (retVal) { return true; } } return (allFalse ? !allFalse : retVal); } // Returns true if the given character is a digit or [a...f], [A...F] this.isHex = function(eventObj, allowNavChars) { var c = getC(eventObj); if(isDigitCheckNavChars(eventObj, allowNavChars) || (c >= "a".charCodeAt(0) && c <= "f".charCodeAt(0)) || (c >= "A".charCodeAt(0) && c <= "F".charCodeAt(0))) { return true; } return false; } // Returns ascii code of character that was just entered this.getC = function(eventObj) { var c = null; if (eventObj.keyCode) { c = eventObj.keyCode; } else if (eventObj.which) { c = eventObj.which; } else if (eventObj.length) { c = eventObj.charCodeAt(0); } else { c = eventObj; } return c; } this.isDash = function(eventObj) { var c = getC(eventObj); if(c == "-".charCodeAt(0)) { return true; } return false; } this.isDot = function(eventObj) { var c = getC(eventObj); if(c == ".".charCodeAt(0)) { return true; } return false; } this.isParens = function(eventObj) { var c = getC(eventObj); if(c == "(".charCodeAt(0) || c == ")".charCodeAt(0)) { return true; } return false; } this.isComma = function(eventObj) { var c = getC(eventObj); if(c == ",".charCodeAt(0)) { return true; } return false; } this.isQuestionMark = function(eventObj) { var c = getC(eventObj); if(c == "?".charCodeAt(0)) { return true; } return false; } this.isSpace = function(eventObj) { var c = getC(eventObj); if(c == " ".charCodeAt(0)) { return true; } return false; } this.isAsterisk = function(eventObj) { var c = getC(eventObj); if(c == "*".charCodeAt(0)) { return true; } return false; } // Returns true if the given character is [0...9], '.', or '-' this.isDigitDashOrDot = function(eventObj) { return Validator.isValid(eventObj, [Validator.DIGIT, Validator.DASH, Validator.DOT]); } this.isDigitOrAsterisk = function(eventObj, allowNavChars) { return (Validator.isValid(eventObj, [Validator.DIGIT, Validator.ASTERISK]) || ( allowNavChars && isNavChar(getC(eventObj)) )); } this.isDigitDashOrParens = function(eventObj) { return Validator.isValid(eventObj, [Validator.DIGIT, Validator.DASH, Validator.PARENS]); } this.isDigitDashOrComma = function(eventObj) { return Validator.isValid(eventObj, [Validator.DIGIT, Validator.DASH, Validator.COMMA]); } // Returns true unless the given character is a question mark this.isNotQuestionMark = function(eventObj) { return Validator.isValid(eventObj, [new Validator.CheckItem(Validator.QUESTIONMARK, false)]); } // Returns true unless the given character is a space this.isNotSpace = function(eventObj) { return Validator.isValid(eventObj, [new Validator.CheckItem(Validator.SPACE, false)]); } // Returns true if character c is an English letter // (A .. Z, a..z) or a nav character (tab, home, end, left/right, etc). // this.isLetter = function(obj) { return isLetterCheckNavChars(obj, true); } this.isLetterCheckNavChars = function(obj, allowNavChars) { var c = getC(obj); return ((allowNavChars && isNavChar(c)) || (((c >= "a".charCodeAt(0)) && (c <= "z".charCodeAt(0))) || ((c >= "A".charCodeAt(0)) && (c <= "Z".charCodeAt(0))) )); } // Returns true if character c is a digit // (0 .. 9) or a nav character (tab, home, end, left/right, etc) this.isDigit = function(obj) { return isDigitCheckNavChars(obj, true); } // Returns true if obj is a digit or a nav character if allowNavChars is true this.isDigitCheckNavChars = function(obj, allowNavChars) { var c = null; var flag = true; if (obj.keyCode) { c = obj.keyCode; } else if (obj.which) { c = obj.which; flag = false; } else if (obj.length) { c = obj.charCodeAt(0); } else { c = obj; } //detects IE, no need for nav chars, they're allowed anyway if(document.all) allowNavChars = false; //in firefox, detects characters that have the same ascii value as nav chars if(flag == false && isNavChar(c)) return false; return ( (allowNavChars && isNavChar(c)) || ((c >= 48) && (c <= 57))); } this.isNavChar = function(keyCode) { var c; if (keyCode.keyCode) { c = keyCode.keyCode; } else if (keyCode.which) { c = keyCode.which; } else { c = keyCode; } if (keyCode.shiftKey || keyCode.ctrlKey) { return false; } else if (keyCode.modifiers && (keyCode.modifiers & Event.SHIFT_MASK)) { return false; } switch (c) { case 8: // backspace case 9: // tab case 13: // cr case 35: // end case 36: // home case 37: // left arrow case 39: // right arrow case 46: // delete case 116: // F5 return true; break; default: return false; } }