+<!DOCTYPE form-validation PUBLIC\r
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"\r
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">\r
+<!--\r
+\r
+ This file contains the default Struts Validator pluggable validator\r
+ definitions. It should be placed somewhere under /WEB-INF and\r
+ referenced in the struts-config.xml under the plug-in element\r
+ for the ValidatorPlugIn.\r
+\r
+ <plug-in className="org.apache.struts.validator.ValidatorPlugIn">\r
+ <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,\r
+ /WEB-INF/validation.xml"/>\r
+ </plug-in>\r
+\r
+ These are the default error messages associated with\r
+ each validator defined in this file. They should be\r
+ added to your projects ApplicationResources.properties\r
+ file or you can associate new ones by modifying the\r
+ pluggable validators msg attributes in this file.\r
+\r
+ # Struts Validator Error Messages\r
+ errors.required={0} is required.\r
+ errors.minlength={0} can not be less than {1} characters.\r
+ errors.maxlength={0} can not be greater than {1} characters.\r
+ errors.invalid={0} is invalid.\r
+\r
+ errors.byte={0} must be a byte.\r
+ errors.short={0} must be a short.\r
+ errors.integer={0} must be an integer.\r
+ errors.long={0} must be a long.\r
+ errors.float={0} must be a float.\r
+ errors.double={0} must be a double.\r
+\r
+ errors.date={0} is not a date.\r
+ errors.range={0} is not in the range {1} through {2}.\r
+ errors.creditcard={0} is an invalid credit card number.\r
+ errors.email={0} is an invalid e-mail address.\r
+\r
+-->\r
+\r
+<form-validation>\r
+\r
+ <global>\r
+\r
+ <validator name="required"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateRequired"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ msg="errors.required">\r
+\r
+ <javascript><![CDATA[\r
+ function validateRequired(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRequired = new required();\r
+ for (x in oRequired) {\r
+ var field = form[oRequired[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'file' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio' ||\r
+ field.type == 'password') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (trim(value).length == 0) {\r
+ \r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRequired[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }\r
+ \r
+ // Trim whitespace from left and right sides of s.\r
+ function trim(s) {\r
+ return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );\r
+ }\r
+ \r
+ ]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="requiredif"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateRequiredIf"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ org.apache.commons.validator.Validator,\r
+ javax.servlet.http.HttpServletRequest"\r
+ msg="errors.required">\r
+ </validator>\r
+\r
+ <validator name="minlength"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMinLength"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.minlength">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMinLength(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMinLength = new minlength();\r
+ for (x in oMinLength) {\r
+ var field = form[oMinLength[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea') {\r
+ \r
+ var iMin = parseInt(oMinLength[x][2]("minlength"));\r
+ if ((trim(field.value).length > 0) && (field.value.length < iMin)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMinLength[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="maxlength"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMaxLength"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.maxlength">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMaxLength(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMaxLength = new maxlength();\r
+ for (x in oMaxLength) {\r
+ var field = form[oMaxLength[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea') {\r
+ \r
+ var iMax = parseInt(oMaxLength[x][2]("maxlength"));\r
+ if (field.value.length > iMax) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMaxLength[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="mask"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMask"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.invalid">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMask(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMasked = new mask();\r
+ for (x in oMasked) {\r
+ var field = form[oMasked[x][0]];\r
+ \r
+ if ((field.type == 'text' || \r
+ field.type == 'textarea') && \r
+ (field.value.length > 0)) {\r
+ \r
+ if (!matchPattern(field.value, oMasked[x][2]("mask"))) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMasked[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ \r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }\r
+\r
+ function matchPattern(value, mask) {\r
+ return mask.exec(value);\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="byte"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateByte"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.byte"\r
+ jsFunctionName="ByteValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateByte(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oByte = new ByteValidations();\r
+ for (x in oByte) {\r
+ var field = form[oByte[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+\r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oByte[x][1];\r
+\r
+ } else {\r
+\r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oByte[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ \r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="short"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateShort"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.short"\r
+ jsFunctionName="ShortValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateShort(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oShort = new ShortValidations();\r
+ for (x in oShort) {\r
+ var field = form[oShort[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oShort[x][1];\r
+\r
+ } else {\r
+ \r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oShort[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="integer"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateInteger"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.integer"\r
+ jsFunctionName="IntegerValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateInteger(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oInteger = new IntegerValidations();\r
+ for (x in oInteger) {\r
+ var field = form[oInteger[x][0]];\r
+\r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ \r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oInteger[x][1];\r
+ \r
+ } else {\r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oInteger[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ function isAllDigits(argvalue) {\r
+ argvalue = argvalue.toString();\r
+ var validChars = "0123456789";\r
+ var startFrom = 0;\r
+ if (argvalue.substring(0, 2) == "0x") {\r
+ validChars = "0123456789abcdefABCDEF";\r
+ startFrom = 2;\r
+ } else if (argvalue.charAt(0) == "0") {\r
+ validChars = "01234567";\r
+ startFrom = 1;\r
+ } else if (argvalue.charAt(0) == "-") {\r
+ startFrom = 1;\r
+ }\r
+ \r
+ for (var n = startFrom; n < argvalue.length; n++) {\r
+ if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="long"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateLong"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.long"/>\r
+\r
+\r
+ <validator name="float"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateFloat"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.float"\r
+ jsFunctionName="FloatValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateFloat(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oFloat = new FloatValidations();\r
+ for (x in oFloat) {\r
+ var field = form[oFloat[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ // remove '.' before checking digits\r
+ var tempArray = value.split('.');\r
+ var joinedString= tempArray.join('');\r
+\r
+ if (!isAllDigits(joinedString)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oFloat[x][1];\r
+\r
+ } else {\r
+ var iValue = parseFloat(value);\r
+ if (isNaN(iValue)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oFloat[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="double"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateDouble"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.double"/>\r
+\r
+\r
+ <validator name="date"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateDate"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.date"\r
+ jsFunctionName="DateValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateDate(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oDate = new DateValidations();\r
+ for (x in oDate) {\r
+ var value = form[oDate[x][0]].value;\r
+ var datePattern = oDate[x][2]("datePatternStrict");\r
+ if ((form[oDate[x][0]].type == 'text' ||\r
+ form[oDate[x][0]].type == 'textarea') &&\r
+ (value.length > 0) &&\r
+ (datePattern.length > 0)) {\r
+ var MONTH = "MM";\r
+ var DAY = "dd";\r
+ var YEAR = "yyyy";\r
+ var orderMonth = datePattern.indexOf(MONTH);\r
+ var orderDay = datePattern.indexOf(DAY);\r
+ var orderYear = datePattern.indexOf(YEAR);\r
+ if ((orderDay < orderYear && orderDay > orderMonth)) {\r
+ var iDelim1 = orderMonth + MONTH.length;\r
+ var iDelim2 = orderDay + DAY.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderDay && iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");\r
+ } else if (iDelim1 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");\r
+ } else if (iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[2], matched[1], matched[3])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else if ((orderMonth < orderYear && orderMonth > orderDay)) {\r
+ var iDelim1 = orderDay + DAY.length;\r
+ var iDelim2 = orderMonth + MONTH.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderMonth && iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");\r
+ } else if (iDelim1 == orderMonth) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");\r
+ } else if (iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[1], matched[2], matched[3])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else if ((orderMonth > orderYear && orderMonth < orderDay)) {\r
+ var iDelim1 = orderYear + YEAR.length;\r
+ var iDelim2 = orderMonth + MONTH.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderMonth && iDelim2 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");\r
+ } else if (iDelim1 == orderMonth) {\r
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");\r
+ } else if (iDelim2 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[3], matched[2], matched[1])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ function isValidDate(day, month, year) {\r
+ if (month < 1 || month > 12) {\r
+ return false;\r
+ }\r
+ if (day < 1 || day > 31) {\r
+ return false;\r
+ }\r
+ if ((month == 4 || month == 6 || month == 9 || month == 11) &&\r
+ (day == 31)) {\r
+ return false;\r
+ }\r
+ if (month == 2) {\r
+ var leap = (year % 4 == 0 &&\r
+ (year % 100 != 0 || year % 400 == 0));\r
+ if (day>29 || (day == 29 && !leap)) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+<!-- range is deprecated use intRange instead -->\r
+ <validator name="range"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateIntRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="integer"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateRange(form) {\r
+ return validateIntRange(form);\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="intRange"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateIntRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="integer"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateIntRange(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRange = new intRange();\r
+ for (x in oRange) {\r
+ var field = form[oRange[x][0]];\r
+ \r
+ if ((field.type == 'text' ||\r
+ field.type == 'textarea') &&\r
+ (field.value.length > 0)) {\r
+ \r
+ var iMin = parseInt(oRange[x][2]("min"));\r
+ var iMax = parseInt(oRange[x][2]("max"));\r
+ var iValue = parseInt(field.value);\r
+ if (!(iValue >= iMin && iValue <= iMax)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRange[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="floatRange"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateFloatRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="float"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateFloatRange(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRange = new floatRange();\r
+ for (x in oRange) {\r
+ var field = form[oRange[x][0]];\r
+ \r
+ if ((field.type == 'text' ||\r
+ field.type == 'textarea') &&\r
+ (field.value.length > 0)) {\r
+ \r
+ var fMin = parseFloat(oRange[x][2]("min"));\r
+ var fMax = parseFloat(oRange[x][2]("max"));\r
+ var fValue = parseFloat(field.value);\r
+ if (!(fValue >= fMin && fValue <= fMax)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRange[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="creditCard"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateCreditCard"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.creditcard">\r
+\r
+ <javascript><![CDATA[\r
+ function validateCreditCard(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oCreditCard = new creditCard();\r
+ for (x in oCreditCard) {\r
+ if ((form[oCreditCard[x][0]].type == 'text' ||\r
+ form[oCreditCard[x][0]].type == 'textarea') &&\r
+ (form[oCreditCard[x][0]].value.length > 0)) {\r
+ if (!luhnCheck(form[oCreditCard[x][0]].value)) {\r
+ if (i == 0) {\r
+ focusField = form[oCreditCard[x][0]];\r
+ }\r
+ fields[i++] = oCreditCard[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ /**\r
+ * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl\r
+ */\r
+ function luhnCheck(cardNumber) {\r
+ if (isLuhnNum(cardNumber)) {\r
+ var no_digit = cardNumber.length;\r
+ var oddoeven = no_digit & 1;\r
+ var sum = 0;\r
+ for (var count = 0; count < no_digit; count++) {\r
+ var digit = parseInt(cardNumber.charAt(count));\r
+ if (!((count & 1) ^ oddoeven)) {\r
+ digit *= 2;\r
+ if (digit > 9) digit -= 9;\r
+ };\r
+ sum += digit;\r
+ };\r
+ if (sum == 0) return false;\r
+ if (sum % 10 == 0) return true;\r
+ };\r
+ return false;\r
+ }\r
+\r
+ function isLuhnNum(argvalue) {\r
+ argvalue = argvalue.toString();\r
+ if (argvalue.length == 0) {\r
+ return false;\r
+ }\r
+ for (var n = 0; n < argvalue.length; n++) {\r
+ if ((argvalue.substring(n, n+1) < "0") ||\r
+ (argvalue.substring(n,n+1) > "9")) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="email"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateEmail"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.email">\r
+\r
+ <javascript><![CDATA[\r
+ function validateEmail(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oEmail = new email();\r
+ for (x in oEmail) {\r
+ if ((form[oEmail[x][0]].type == 'text' ||\r
+ form[oEmail[x][0]].type == 'textarea') &&\r
+ (form[oEmail[x][0]].value.length > 0)) {\r
+ if (!checkEmail(form[oEmail[x][0]].value)) {\r
+ if (i == 0) {\r
+ focusField = form[oEmail[x][0]];\r
+ }\r
+ fields[i++] = oEmail[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ /**\r
+ * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),\r
+ * http://javascript.internet.com\r
+ */\r
+ function checkEmail(emailStr) {\r
+ if (emailStr.length == 0) {\r
+ return true;\r
+ }\r
+ var emailPat=/^(.+)@(.+)$/;\r
+ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";\r
+ var validChars="\[^\\s" + specialChars + "\]";\r
+ var quotedUser="(\"[^\"]*\")";\r
+ var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;\r
+ var atom=validChars + '+';\r
+ var word="(" + atom + "|" + quotedUser + ")";\r
+ var userPat=new RegExp("^" + word + "(\\." + word + ")*$");\r
+ var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");\r
+ var matchArray=emailStr.match(emailPat);\r
+ if (matchArray == null) {\r
+ return false;\r
+ }\r
+ var user=matchArray[1];\r
+ var domain=matchArray[2];\r
+ if (user.match(userPat) == null) {\r
+ return false;\r
+ }\r
+ var IPArray = domain.match(ipDomainPat);\r
+ if (IPArray != null) {\r
+ for (var i = 1; i <= 4; i++) {\r
+ if (IPArray[i] > 255) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ var domainArray=domain.match(domainPat);\r
+ if (domainArray == null) {\r
+ return false;\r
+ }\r
+ var atomPat=new RegExp(atom,"g");\r
+ var domArr=domain.match(atomPat);\r
+ var len=domArr.length;\r
+ if ((domArr[domArr.length-1].length < 2) ||\r
+ (domArr[domArr.length-1].length > 3)) {\r
+ return false;\r
+ }\r
+ if (len < 2) {\r
+ return false;\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ </global>\r
+\r
+</form-validation>\r