function QMFormValidator(formName) { this.form = document.forms[formName]; this.add = QMFormValidator_add; this.validate = QMFormValidator_validate; this.setCustomValidation = QMFormValidator_custom; this.customValidation = null; this.form.qmValidator = this; function QMFormValidator_add(inputName, validatorName, params) { var input = this.form[inputName]; if (!input.qmValidators) { input.qmValidators = new Array(); } var i = input.qmValidators.length; switch (validatorName) { case 'int': case 'integer': input.qmValidators[i] = new QMIntegerValidator(input, params); break; case 'float': case 'double': case 'decimal': input.qmValidators[i] = new QMDecimalValidator(input, params); break; case 'date': input.qmValidators[i] = new QMDateValidator(input, params); break; case 'regexpr': input.qmValidators[i] = new QMRegexprValidator(input, params); break; case 'email': input.qmValidators[i] = new QMEmailValidator(input, params); break; case 'req': case 'required': input.qmValidators[i] = new QMRequiredValidator(input, params); break; case 'length': input.qmValidators[i] = new QMLengthValidator(input, params); break; case 'range': input.qmValidators[i] = new QMRangeValidator(input, params); break; case 'dontselect': input.qmValidators[i] = new QMSelectValidator(input, params); break; } } function QMFormValidator_validate() { var n = this.form.elements.length; var m = 0; var valid = true; for (i=0; i 0 && isNaN(value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid number format."); } return false; } return true; } } function QMDecimalValidator(input, params) { this.input = input; this.params = params; this.validate = QMDecimalValidator_validate; function QMDecimalValidator_validate() { var value = parseFloat(this.input.value); if (this.input.value.length > 0 && isNaN(value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid number format."); } return false; } return true; } } function QMDateValidator(input, params) { this.input = input; this.params = params; this.validate = QMDateValidator_validate; function QMDateValidator_validate() { var pattern = /^((?:19|20)\d\d)\-((?:0?[1-9])|(?:1[0-2]))\-((?:0?[1-9])|(?:[12]\d)|(?:3[01]))$/;; if (this.params.pattern) { pattern = this.params.pattern } if (this.input.value.length > 0 && !pattern.test(this.input.value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid date format."); } return false; } return true; } } function QMFullDateValidator(input, params) { this.input = input; this.params = params; this.validate = QMDateValidator_validate; function QMDateValidator_validate() { var pattern = /^\d{4}\-\d{2}\-\d{2}\s(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/; if (this.params.pattern) { pattern = this.params.pattern } if (this.input.value.length > 0 && !pattern.test(this.input.value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid date format."); } return false; } return true; } } function QMRegexprValidator(input, params) { this.input = input; this.params = params; this.validate = QMRegexprValidator_validate; function QMRegexprValidator_validate() { var pattern = params.regexpr; if (this.input.value.length > 0 && !pattern.test(this.input.value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid format."); } return false; } return true; } } function QMEmailValidator(input, params) { this.input = input; this.params = params; this.validate = QMEmailValidator_validate; function QMEmailValidator_validate() { var pattern = /^[a-zA-Z0-9\-_.]+@[a-zA-Z0-9\-_]+(\.[a-zA-Z0-9\-_]+)+$/; if (this.input.value.length > 0 && !pattern.test(this.input.value)) { if (this.params.message) { alert(this.params.message); } else { alert("Invalid email format."); } return false; } return true; } } function QMRequiredValidator(input, params) { this.input = input; this.params = params; this.validate = QMRequiredValidator_validate; function QMRequiredValidator_validate() { var value = this.input.value.replace(/^\s*|\s*$/g, ""); if (value.length == 0) { if (this.params.message) { alert(this.params.message); } else { alert("Required field."); } return false; } return true; } } function QMLengthValidator(input, params) { this.input = input; this.params = params; this.validate = QMLengthValidator_validate; function QMLengthValidator_validate() { var value = this.input.value.replace(/^\s*|\s*$/g, ""); var minL = (this.params.min ? this.params.min : 0); var maxL = (this.params.max ? this.params.max : 999999); if (value.length < minL || value.length > maxL) { if (this.params.message) { alert(this.params.message); } else { alert("The field must have between " + minL + " and " + maxL + " characters."); } return false; } return true; } } function QMRangeValidator(input, params) { this.input = input; this.params = params; this.validate = QMRangeValidator_validate; function QMRangeValidator_validate() { var value = parseFloat(this.input.value); var valid = true; var rMin = "-inf"; var rMax = "inf"; if (this.params.min && value < this.params.min) { valid = false; rMin = this.params.min; } if (this.params.max && value > this.params.max) { valid = false; rMax = this.params.max; } if (!valid) { if (this.params.message) { alert(this.params.message); } else { alert("The field is out of range [" + rMin + ", " + rMax + "]."); } return false; } return true; } } function QMSelectValidator(input, params) { this.input = input; this.params = params; this.validate = QMSelectValidator_validate; function QMSelectValidator_validate() { if (this.input.selectedIndex == this.params.dontSelect) { if (this.params.message) { alert(this.params.message); } else { alert("The field is required."); } return false; } return true; } }