1 <!DOCTYPE form-validation PUBLIC
\r
2 "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
\r
3 "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
\r
6 This file contains the default Struts Validator pluggable validator
\r
7 definitions. It should be placed somewhere under /WEB-INF and
\r
8 referenced in the struts-config.xml under the plug-in element
\r
9 for the ValidatorPlugIn.
\r
11 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
\r
12 <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
\r
13 /WEB-INF/validation.xml"/>
\r
16 These are the default error messages associated with
\r
17 each validator defined in this file. They should be
\r
18 added to your projects ApplicationResources.properties
\r
19 file or you can associate new ones by modifying the
\r
20 pluggable validators msg attributes in this file.
\r
22 # Struts Validator Error Messages
\r
23 errors.required={0} is required.
\r
24 errors.minlength={0} can not be less than {1} characters.
\r
25 errors.maxlength={0} can not be greater than {1} characters.
\r
26 errors.invalid={0} is invalid.
\r
28 errors.byte={0} must be a byte.
\r
29 errors.short={0} must be a short.
\r
30 errors.integer={0} must be an integer.
\r
31 errors.long={0} must be a long.
\r
32 errors.float={0} must be a float.
\r
33 errors.double={0} must be a double.
\r
35 errors.date={0} is not a date.
\r
36 errors.range={0} is not in the range {1} through {2}.
\r
37 errors.creditcard={0} is an invalid credit card number.
\r
38 errors.email={0} is an invalid e-mail address.
\r
46 <validator name="required"
\r
47 classname="org.apache.struts.validator.FieldChecks"
\r
48 method="validateRequired"
\r
49 methodParams="java.lang.Object,
\r
50 org.apache.commons.validator.ValidatorAction,
\r
51 org.apache.commons.validator.Field,
\r
52 org.apache.struts.action.ActionErrors,
\r
53 javax.servlet.http.HttpServletRequest"
\r
54 msg="errors.required">
\r
56 <javascript><![CDATA[
\r
57 function validateRequired(form) {
\r
59 var focusField = null;
\r
61 var fields = new Array();
\r
62 oRequired = new required();
\r
63 for (x in oRequired) {
\r
64 var field = form[oRequired[x][0]];
\r
66 if (field.type == 'text' ||
\r
67 field.type == 'textarea' ||
\r
68 field.type == 'file' ||
\r
69 field.type == 'select-one' ||
\r
70 field.type == 'radio' ||
\r
71 field.type == 'password') {
\r
74 // get field's value
\r
75 if (field.type == "select-one") {
\r
76 var si = field.selectedIndex;
\r
78 value = field.options[si].value;
\r
81 value = field.value;
\r
84 if (trim(value).length == 0) {
\r
89 fields[i++] = oRequired[x][1];
\r
94 if (fields.length > 0) {
\r
96 alert(fields.join('\n'));
\r
101 // Trim whitespace from left and right sides of s.
\r
103 return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
\r
111 <validator name="requiredif"
\r
112 classname="org.apache.struts.validator.FieldChecks"
\r
113 method="validateRequiredIf"
\r
114 methodParams="java.lang.Object,
\r
115 org.apache.commons.validator.ValidatorAction,
\r
116 org.apache.commons.validator.Field,
\r
117 org.apache.struts.action.ActionErrors,
\r
118 org.apache.commons.validator.Validator,
\r
119 javax.servlet.http.HttpServletRequest"
\r
120 msg="errors.required">
\r
123 <validator name="minlength"
\r
124 classname="org.apache.struts.validator.FieldChecks"
\r
125 method="validateMinLength"
\r
126 methodParams="java.lang.Object,
\r
127 org.apache.commons.validator.ValidatorAction,
\r
128 org.apache.commons.validator.Field,
\r
129 org.apache.struts.action.ActionErrors,
\r
130 javax.servlet.http.HttpServletRequest"
\r
132 msg="errors.minlength">
\r
134 <javascript><![CDATA[
\r
135 function validateMinLength(form) {
\r
136 var isValid = true;
\r
137 var focusField = null;
\r
139 var fields = new Array();
\r
140 oMinLength = new minlength();
\r
141 for (x in oMinLength) {
\r
142 var field = form[oMinLength[x][0]];
\r
144 if (field.type == 'text' ||
\r
145 field.type == 'textarea') {
\r
147 var iMin = parseInt(oMinLength[x][2]("minlength"));
\r
148 if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
\r
150 focusField = field;
\r
152 fields[i++] = oMinLength[x][1];
\r
157 if (fields.length > 0) {
\r
158 focusField.focus();
\r
159 alert(fields.join('\n'));
\r
168 <validator name="maxlength"
\r
169 classname="org.apache.struts.validator.FieldChecks"
\r
170 method="validateMaxLength"
\r
171 methodParams="java.lang.Object,
\r
172 org.apache.commons.validator.ValidatorAction,
\r
173 org.apache.commons.validator.Field,
\r
174 org.apache.struts.action.ActionErrors,
\r
175 javax.servlet.http.HttpServletRequest"
\r
177 msg="errors.maxlength">
\r
179 <javascript><![CDATA[
\r
180 function validateMaxLength(form) {
\r
181 var isValid = true;
\r
182 var focusField = null;
\r
184 var fields = new Array();
\r
185 oMaxLength = new maxlength();
\r
186 for (x in oMaxLength) {
\r
187 var field = form[oMaxLength[x][0]];
\r
189 if (field.type == 'text' ||
\r
190 field.type == 'textarea') {
\r
192 var iMax = parseInt(oMaxLength[x][2]("maxlength"));
\r
193 if (field.value.length > iMax) {
\r
195 focusField = field;
\r
197 fields[i++] = oMaxLength[x][1];
\r
202 if (fields.length > 0) {
\r
203 focusField.focus();
\r
204 alert(fields.join('\n'));
\r
213 <validator name="mask"
\r
214 classname="org.apache.struts.validator.FieldChecks"
\r
215 method="validateMask"
\r
216 methodParams="java.lang.Object,
\r
217 org.apache.commons.validator.ValidatorAction,
\r
218 org.apache.commons.validator.Field,
\r
219 org.apache.struts.action.ActionErrors,
\r
220 javax.servlet.http.HttpServletRequest"
\r
222 msg="errors.invalid">
\r
224 <javascript><![CDATA[
\r
225 function validateMask(form) {
\r
226 var isValid = true;
\r
227 var focusField = null;
\r
229 var fields = new Array();
\r
230 oMasked = new mask();
\r
231 for (x in oMasked) {
\r
232 var field = form[oMasked[x][0]];
\r
234 if ((field.type == 'text' ||
\r
235 field.type == 'textarea') &&
\r
236 (field.value.length > 0)) {
\r
238 if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
\r
240 focusField = field;
\r
242 fields[i++] = oMasked[x][1];
\r
248 if (fields.length > 0) {
\r
249 focusField.focus();
\r
250 alert(fields.join('\n'));
\r
255 function matchPattern(value, mask) {
\r
256 return mask.exec(value);
\r
263 <validator name="byte"
\r
264 classname="org.apache.struts.validator.FieldChecks"
\r
265 method="validateByte"
\r
266 methodParams="java.lang.Object,
\r
267 org.apache.commons.validator.ValidatorAction,
\r
268 org.apache.commons.validator.Field,
\r
269 org.apache.struts.action.ActionErrors,
\r
270 javax.servlet.http.HttpServletRequest"
\r
273 jsFunctionName="ByteValidations">
\r
275 <javascript><![CDATA[
\r
276 function validateByte(form) {
\r
278 var focusField = null;
\r
280 var fields = new Array();
\r
281 oByte = new ByteValidations();
\r
283 var field = form[oByte[x][0]];
\r
285 if (field.type == 'text' ||
\r
286 field.type == 'textarea' ||
\r
287 field.type == 'select-one' ||
\r
288 field.type == 'radio') {
\r
291 // get field's value
\r
292 if (field.type == "select-one") {
\r
293 var si = field.selectedIndex;
\r
295 value = field.options[si].value;
\r
298 value = field.value;
\r
301 if (value.length > 0) {
\r
302 if (!isAllDigits(value)) {
\r
305 focusField = field;
\r
307 fields[i++] = oByte[x][1];
\r
311 var iValue = parseInt(value);
\r
312 if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
\r
314 focusField = field;
\r
316 fields[i++] = oByte[x][1];
\r
324 if (fields.length > 0) {
\r
325 focusField.focus();
\r
326 alert(fields.join('\n'));
\r
335 <validator name="short"
\r
336 classname="org.apache.struts.validator.FieldChecks"
\r
337 method="validateShort"
\r
338 methodParams="java.lang.Object,
\r
339 org.apache.commons.validator.ValidatorAction,
\r
340 org.apache.commons.validator.Field,
\r
341 org.apache.struts.action.ActionErrors,
\r
342 javax.servlet.http.HttpServletRequest"
\r
345 jsFunctionName="ShortValidations">
\r
347 <javascript><![CDATA[
\r
348 function validateShort(form) {
\r
350 var focusField = null;
\r
352 var fields = new Array();
\r
353 oShort = new ShortValidations();
\r
354 for (x in oShort) {
\r
355 var field = form[oShort[x][0]];
\r
357 if (field.type == 'text' ||
\r
358 field.type == 'textarea' ||
\r
359 field.type == 'select-one' ||
\r
360 field.type == 'radio') {
\r
363 // get field's value
\r
364 if (field.type == "select-one") {
\r
365 var si = field.selectedIndex;
\r
367 value = field.options[si].value;
\r
370 value = field.value;
\r
373 if (value.length > 0) {
\r
374 if (!isAllDigits(value)) {
\r
377 focusField = field;
\r
379 fields[i++] = oShort[x][1];
\r
383 var iValue = parseInt(value);
\r
384 if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
\r
386 focusField = field;
\r
388 fields[i++] = oShort[x][1];
\r
395 if (fields.length > 0) {
\r
396 focusField.focus();
\r
397 alert(fields.join('\n'));
\r
406 <validator name="integer"
\r
407 classname="org.apache.struts.validator.FieldChecks"
\r
408 method="validateInteger"
\r
409 methodParams="java.lang.Object,
\r
410 org.apache.commons.validator.ValidatorAction,
\r
411 org.apache.commons.validator.Field,
\r
412 org.apache.struts.action.ActionErrors,
\r
413 javax.servlet.http.HttpServletRequest"
\r
415 msg="errors.integer"
\r
416 jsFunctionName="IntegerValidations">
\r
418 <javascript><![CDATA[
\r
419 function validateInteger(form) {
\r
421 var focusField = null;
\r
423 var fields = new Array();
\r
424 oInteger = new IntegerValidations();
\r
425 for (x in oInteger) {
\r
426 var field = form[oInteger[x][0]];
\r
428 if (field.type == 'text' ||
\r
429 field.type == 'textarea' ||
\r
430 field.type == 'select-one' ||
\r
431 field.type == 'radio') {
\r
434 // get field's value
\r
435 if (field.type == "select-one") {
\r
436 var si = field.selectedIndex;
\r
438 value = field.options[si].value;
\r
441 value = field.value;
\r
444 if (value.length > 0) {
\r
446 if (!isAllDigits(value)) {
\r
449 focusField = field;
\r
451 fields[i++] = oInteger[x][1];
\r
454 var iValue = parseInt(value);
\r
455 if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
\r
457 focusField = field;
\r
459 fields[i++] = oInteger[x][1];
\r
466 if (fields.length > 0) {
\r
467 focusField.focus();
\r
468 alert(fields.join('\n'));
\r
473 function isAllDigits(argvalue) {
\r
474 argvalue = argvalue.toString();
\r
475 var validChars = "0123456789";
\r
477 if (argvalue.substring(0, 2) == "0x") {
\r
478 validChars = "0123456789abcdefABCDEF";
\r
480 } else if (argvalue.charAt(0) == "0") {
\r
481 validChars = "01234567";
\r
483 } else if (argvalue.charAt(0) == "-") {
\r
487 for (var n = startFrom; n < argvalue.length; n++) {
\r
488 if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
\r
497 <validator name="long"
\r
498 classname="org.apache.struts.validator.FieldChecks"
\r
499 method="validateLong"
\r
500 methodParams="java.lang.Object,
\r
501 org.apache.commons.validator.ValidatorAction,
\r
502 org.apache.commons.validator.Field,
\r
503 org.apache.struts.action.ActionErrors,
\r
504 javax.servlet.http.HttpServletRequest"
\r
506 msg="errors.long"/>
\r
509 <validator name="float"
\r
510 classname="org.apache.struts.validator.FieldChecks"
\r
511 method="validateFloat"
\r
512 methodParams="java.lang.Object,
\r
513 org.apache.commons.validator.ValidatorAction,
\r
514 org.apache.commons.validator.Field,
\r
515 org.apache.struts.action.ActionErrors,
\r
516 javax.servlet.http.HttpServletRequest"
\r
519 jsFunctionName="FloatValidations">
\r
521 <javascript><![CDATA[
\r
522 function validateFloat(form) {
\r
524 var focusField = null;
\r
526 var fields = new Array();
\r
527 oFloat = new FloatValidations();
\r
528 for (x in oFloat) {
\r
529 var field = form[oFloat[x][0]];
\r
531 if (field.type == 'text' ||
\r
532 field.type == 'textarea' ||
\r
533 field.type == 'select-one' ||
\r
534 field.type == 'radio') {
\r
537 // get field's value
\r
538 if (field.type == "select-one") {
\r
539 var si = field.selectedIndex;
\r
541 value = field.options[si].value;
\r
544 value = field.value;
\r
547 if (value.length > 0) {
\r
548 // remove '.' before checking digits
\r
549 var tempArray = value.split('.');
\r
550 var joinedString= tempArray.join('');
\r
552 if (!isAllDigits(joinedString)) {
\r
555 focusField = field;
\r
557 fields[i++] = oFloat[x][1];
\r
560 var iValue = parseFloat(value);
\r
561 if (isNaN(iValue)) {
\r
563 focusField = field;
\r
565 fields[i++] = oFloat[x][1];
\r
572 if (fields.length > 0) {
\r
573 focusField.focus();
\r
574 alert(fields.join('\n'));
\r
583 <validator name="double"
\r
584 classname="org.apache.struts.validator.FieldChecks"
\r
585 method="validateDouble"
\r
586 methodParams="java.lang.Object,
\r
587 org.apache.commons.validator.ValidatorAction,
\r
588 org.apache.commons.validator.Field,
\r
589 org.apache.struts.action.ActionErrors,
\r
590 javax.servlet.http.HttpServletRequest"
\r
592 msg="errors.double"/>
\r
595 <validator name="date"
\r
596 classname="org.apache.struts.validator.FieldChecks"
\r
597 method="validateDate"
\r
598 methodParams="java.lang.Object,
\r
599 org.apache.commons.validator.ValidatorAction,
\r
600 org.apache.commons.validator.Field,
\r
601 org.apache.struts.action.ActionErrors,
\r
602 javax.servlet.http.HttpServletRequest"
\r
605 jsFunctionName="DateValidations">
\r
607 <javascript><![CDATA[
\r
608 function validateDate(form) {
\r
610 var focusField = null;
\r
612 var fields = new Array();
\r
613 oDate = new DateValidations();
\r
615 var value = form[oDate[x][0]].value;
\r
616 var datePattern = oDate[x][2]("datePatternStrict");
\r
617 if ((form[oDate[x][0]].type == 'text' ||
\r
618 form[oDate[x][0]].type == 'textarea') &&
\r
619 (value.length > 0) &&
\r
620 (datePattern.length > 0)) {
\r
624 var orderMonth = datePattern.indexOf(MONTH);
\r
625 var orderDay = datePattern.indexOf(DAY);
\r
626 var orderYear = datePattern.indexOf(YEAR);
\r
627 if ((orderDay < orderYear && orderDay > orderMonth)) {
\r
628 var iDelim1 = orderMonth + MONTH.length;
\r
629 var iDelim2 = orderDay + DAY.length;
\r
630 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
\r
631 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
\r
632 if (iDelim1 == orderDay && iDelim2 == orderYear) {
\r
633 dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
\r
634 } else if (iDelim1 == orderDay) {
\r
635 dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
\r
636 } else if (iDelim2 == orderYear) {
\r
637 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
\r
639 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
\r
641 var matched = dateRegexp.exec(value);
\r
642 if(matched != null) {
\r
643 if (!isValidDate(matched[2], matched[1], matched[3])) {
\r
645 focusField = form[oDate[x][0]];
\r
647 fields[i++] = oDate[x][1];
\r
652 focusField = form[oDate[x][0]];
\r
654 fields[i++] = oDate[x][1];
\r
657 } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
\r
658 var iDelim1 = orderDay + DAY.length;
\r
659 var iDelim2 = orderMonth + MONTH.length;
\r
660 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
\r
661 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
\r
662 if (iDelim1 == orderMonth && iDelim2 == orderYear) {
\r
663 dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
\r
664 } else if (iDelim1 == orderMonth) {
\r
665 dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
\r
666 } else if (iDelim2 == orderYear) {
\r
667 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
\r
669 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
\r
671 var matched = dateRegexp.exec(value);
\r
672 if(matched != null) {
\r
673 if (!isValidDate(matched[1], matched[2], matched[3])) {
\r
675 focusField = form[oDate[x][0]];
\r
677 fields[i++] = oDate[x][1];
\r
682 focusField = form[oDate[x][0]];
\r
684 fields[i++] = oDate[x][1];
\r
687 } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
\r
688 var iDelim1 = orderYear + YEAR.length;
\r
689 var iDelim2 = orderMonth + MONTH.length;
\r
690 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
\r
691 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
\r
692 if (iDelim1 == orderMonth && iDelim2 == orderDay) {
\r
693 dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
\r
694 } else if (iDelim1 == orderMonth) {
\r
695 dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
\r
696 } else if (iDelim2 == orderDay) {
\r
697 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
\r
699 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
\r
701 var matched = dateRegexp.exec(value);
\r
702 if(matched != null) {
\r
703 if (!isValidDate(matched[3], matched[2], matched[1])) {
\r
705 focusField = form[oDate[x][0]];
\r
707 fields[i++] = oDate[x][1];
\r
712 focusField = form[oDate[x][0]];
\r
714 fields[i++] = oDate[x][1];
\r
719 focusField = form[oDate[x][0]];
\r
721 fields[i++] = oDate[x][1];
\r
726 if (fields.length > 0) {
\r
727 focusField.focus();
\r
728 alert(fields.join('\n'));
\r
733 function isValidDate(day, month, year) {
\r
734 if (month < 1 || month > 12) {
\r
737 if (day < 1 || day > 31) {
\r
740 if ((month == 4 || month == 6 || month == 9 || month == 11) &&
\r
745 var leap = (year % 4 == 0 &&
\r
746 (year % 100 != 0 || year % 400 == 0));
\r
747 if (day>29 || (day == 29 && !leap)) {
\r
757 <!-- range is deprecated use intRange instead -->
\r
758 <validator name="range"
\r
759 classname="org.apache.struts.validator.FieldChecks"
\r
760 method="validateIntRange"
\r
761 methodParams="java.lang.Object,
\r
762 org.apache.commons.validator.ValidatorAction,
\r
763 org.apache.commons.validator.Field,
\r
764 org.apache.struts.action.ActionErrors,
\r
765 javax.servlet.http.HttpServletRequest"
\r
767 msg="errors.range">
\r
769 <javascript><![CDATA[
\r
770 function validateRange(form) {
\r
771 return validateIntRange(form);
\r
777 <validator name="intRange"
\r
778 classname="org.apache.struts.validator.FieldChecks"
\r
779 method="validateIntRange"
\r
780 methodParams="java.lang.Object,
\r
781 org.apache.commons.validator.ValidatorAction,
\r
782 org.apache.commons.validator.Field,
\r
783 org.apache.struts.action.ActionErrors,
\r
784 javax.servlet.http.HttpServletRequest"
\r
786 msg="errors.range">
\r
788 <javascript><![CDATA[
\r
789 function validateIntRange(form) {
\r
790 var isValid = true;
\r
791 var focusField = null;
\r
793 var fields = new Array();
\r
794 oRange = new intRange();
\r
795 for (x in oRange) {
\r
796 var field = form[oRange[x][0]];
\r
798 if ((field.type == 'text' ||
\r
799 field.type == 'textarea') &&
\r
800 (field.value.length > 0)) {
\r
802 var iMin = parseInt(oRange[x][2]("min"));
\r
803 var iMax = parseInt(oRange[x][2]("max"));
\r
804 var iValue = parseInt(field.value);
\r
805 if (!(iValue >= iMin && iValue <= iMax)) {
\r
807 focusField = field;
\r
809 fields[i++] = oRange[x][1];
\r
814 if (fields.length > 0) {
\r
815 focusField.focus();
\r
816 alert(fields.join('\n'));
\r
824 <validator name="floatRange"
\r
825 classname="org.apache.struts.validator.FieldChecks"
\r
826 method="validateFloatRange"
\r
827 methodParams="java.lang.Object,
\r
828 org.apache.commons.validator.ValidatorAction,
\r
829 org.apache.commons.validator.Field,
\r
830 org.apache.struts.action.ActionErrors,
\r
831 javax.servlet.http.HttpServletRequest"
\r
833 msg="errors.range">
\r
835 <javascript><![CDATA[
\r
836 function validateFloatRange(form) {
\r
837 var isValid = true;
\r
838 var focusField = null;
\r
840 var fields = new Array();
\r
841 oRange = new floatRange();
\r
842 for (x in oRange) {
\r
843 var field = form[oRange[x][0]];
\r
845 if ((field.type == 'text' ||
\r
846 field.type == 'textarea') &&
\r
847 (field.value.length > 0)) {
\r
849 var fMin = parseFloat(oRange[x][2]("min"));
\r
850 var fMax = parseFloat(oRange[x][2]("max"));
\r
851 var fValue = parseFloat(field.value);
\r
852 if (!(fValue >= fMin && fValue <= fMax)) {
\r
854 focusField = field;
\r
856 fields[i++] = oRange[x][1];
\r
861 if (fields.length > 0) {
\r
862 focusField.focus();
\r
863 alert(fields.join('\n'));
\r
871 <validator name="creditCard"
\r
872 classname="org.apache.struts.validator.FieldChecks"
\r
873 method="validateCreditCard"
\r
874 methodParams="java.lang.Object,
\r
875 org.apache.commons.validator.ValidatorAction,
\r
876 org.apache.commons.validator.Field,
\r
877 org.apache.struts.action.ActionErrors,
\r
878 javax.servlet.http.HttpServletRequest"
\r
880 msg="errors.creditcard">
\r
882 <javascript><![CDATA[
\r
883 function validateCreditCard(form) {
\r
885 var focusField = null;
\r
887 var fields = new Array();
\r
888 oCreditCard = new creditCard();
\r
889 for (x in oCreditCard) {
\r
890 if ((form[oCreditCard[x][0]].type == 'text' ||
\r
891 form[oCreditCard[x][0]].type == 'textarea') &&
\r
892 (form[oCreditCard[x][0]].value.length > 0)) {
\r
893 if (!luhnCheck(form[oCreditCard[x][0]].value)) {
\r
895 focusField = form[oCreditCard[x][0]];
\r
897 fields[i++] = oCreditCard[x][1];
\r
902 if (fields.length > 0) {
\r
903 focusField.focus();
\r
904 alert(fields.join('\n'));
\r
910 * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\r
912 function luhnCheck(cardNumber) {
\r
913 if (isLuhnNum(cardNumber)) {
\r
914 var no_digit = cardNumber.length;
\r
915 var oddoeven = no_digit & 1;
\r
917 for (var count = 0; count < no_digit; count++) {
\r
918 var digit = parseInt(cardNumber.charAt(count));
\r
919 if (!((count & 1) ^ oddoeven)) {
\r
921 if (digit > 9) digit -= 9;
\r
925 if (sum == 0) return false;
\r
926 if (sum % 10 == 0) return true;
\r
931 function isLuhnNum(argvalue) {
\r
932 argvalue = argvalue.toString();
\r
933 if (argvalue.length == 0) {
\r
936 for (var n = 0; n < argvalue.length; n++) {
\r
937 if ((argvalue.substring(n, n+1) < "0") ||
\r
938 (argvalue.substring(n,n+1) > "9")) {
\r
949 <validator name="email"
\r
950 classname="org.apache.struts.validator.FieldChecks"
\r
951 method="validateEmail"
\r
952 methodParams="java.lang.Object,
\r
953 org.apache.commons.validator.ValidatorAction,
\r
954 org.apache.commons.validator.Field,
\r
955 org.apache.struts.action.ActionErrors,
\r
956 javax.servlet.http.HttpServletRequest"
\r
958 msg="errors.email">
\r
960 <javascript><![CDATA[
\r
961 function validateEmail(form) {
\r
963 var focusField = null;
\r
965 var fields = new Array();
\r
966 oEmail = new email();
\r
967 for (x in oEmail) {
\r
968 if ((form[oEmail[x][0]].type == 'text' ||
\r
969 form[oEmail[x][0]].type == 'textarea') &&
\r
970 (form[oEmail[x][0]].value.length > 0)) {
\r
971 if (!checkEmail(form[oEmail[x][0]].value)) {
\r
973 focusField = form[oEmail[x][0]];
\r
975 fields[i++] = oEmail[x][1];
\r
980 if (fields.length > 0) {
\r
981 focusField.focus();
\r
982 alert(fields.join('\n'));
\r
988 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
\r
989 * http://javascript.internet.com
\r
991 function checkEmail(emailStr) {
\r
992 if (emailStr.length == 0) {
\r
995 var emailPat=/^(.+)@(.+)$/;
\r
996 var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
\r
997 var validChars="\[^\\s" + specialChars + "\]";
\r
998 var quotedUser="(\"[^\"]*\")";
\r
999 var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
\r
1000 var atom=validChars + '+';
\r
1001 var word="(" + atom + "|" + quotedUser + ")";
\r
1002 var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
\r
1003 var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
\r
1004 var matchArray=emailStr.match(emailPat);
\r
1005 if (matchArray == null) {
\r
1008 var user=matchArray[1];
\r
1009 var domain=matchArray[2];
\r
1010 if (user.match(userPat) == null) {
\r
1013 var IPArray = domain.match(ipDomainPat);
\r
1014 if (IPArray != null) {
\r
1015 for (var i = 1; i <= 4; i++) {
\r
1016 if (IPArray[i] > 255) {
\r
1022 var domainArray=domain.match(domainPat);
\r
1023 if (domainArray == null) {
\r
1026 var atomPat=new RegExp(atom,"g");
\r
1027 var domArr=domain.match(atomPat);
\r
1028 var len=domArr.length;
\r
1029 if ((domArr[domArr.length-1].length < 2) ||
\r
1030 (domArr[domArr.length-1].length > 3)) {
\r
1044 </form-validation>
\r