4bc3ab748e91066e3c310671cc7e21bd35b388e4
[mir.git] / lib / struts / validator-rules.xml
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
4 <!--\r
5 \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
10 \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
14       </plug-in>\r
15 \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
21 \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
27 \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
34 \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
39 \r
40 -->\r
41 \r
42 <form-validation>\r
43 \r
44    <global>\r
45 \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
55 \r
56          <javascript><![CDATA[\r
57             function validateRequired(form) {\r
58                 var isValid = true;\r
59                 var focusField = null;\r
60                 var i = 0;\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
65                         \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
72                         \r
73                         var value = '';\r
74                                                 // get field's value\r
75                                                 if (field.type == "select-one") {\r
76                                                         var si = field.selectedIndex;\r
77                                                         if (si >= 0) {\r
78                                                                 value = field.options[si].value;\r
79                                                         }\r
80                                                 } else {\r
81                                                         value = field.value;\r
82                                                 }\r
83                         \r
84                         if (trim(value).length == 0) {\r
85                         \r
86                                 if (i == 0) {\r
87                                     focusField = field;\r
88                                 }\r
89                                 fields[i++] = oRequired[x][1];\r
90                                 isValid = false;\r
91                         }\r
92                     }\r
93                 }\r
94                 if (fields.length > 0) {\r
95                    focusField.focus();\r
96                    alert(fields.join('\n'));\r
97                 }\r
98                 return isValid;\r
99             }\r
100             \r
101             // Trim whitespace from left and right sides of s.\r
102             function trim(s) {\r
103                 return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );\r
104             }\r
105             \r
106             ]]>\r
107          </javascript>\r
108 \r
109       </validator>\r
110 \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
121       </validator>\r
122 \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
131               depends=""\r
132                   msg="errors.minlength">\r
133 \r
134          <javascript><![CDATA[\r
135             function validateMinLength(form) {\r
136                 var isValid = true;\r
137                 var focusField = null;\r
138                 var i = 0;\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
143                     \r
144                     if (field.type == 'text' ||\r
145                         field.type == 'textarea') {\r
146                         \r
147                         var iMin = parseInt(oMinLength[x][2]("minlength"));\r
148                         if ((trim(field.value).length > 0) && (field.value.length < iMin)) {\r
149                             if (i == 0) {\r
150                                 focusField = field;\r
151                             }\r
152                             fields[i++] = oMinLength[x][1];\r
153                             isValid = false;\r
154                         }\r
155                     }\r
156                 }\r
157                 if (fields.length > 0) {\r
158                    focusField.focus();\r
159                    alert(fields.join('\n'));\r
160                 }\r
161                 return isValid;\r
162             }]]>\r
163          </javascript>\r
164 \r
165       </validator>\r
166 \r
167 \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
176               depends=""\r
177                   msg="errors.maxlength">\r
178 \r
179          <javascript><![CDATA[\r
180             function validateMaxLength(form) {\r
181                 var isValid = true;\r
182                 var focusField = null;\r
183                 var i = 0;\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
188                     \r
189                     if (field.type == 'text' ||\r
190                         field.type == 'textarea') {\r
191                         \r
192                         var iMax = parseInt(oMaxLength[x][2]("maxlength"));\r
193                         if (field.value.length > iMax) {\r
194                             if (i == 0) {\r
195                                 focusField = field;\r
196                             }\r
197                             fields[i++] = oMaxLength[x][1];\r
198                             isValid = false;\r
199                         }\r
200                     }\r
201                 }\r
202                 if (fields.length > 0) {\r
203                    focusField.focus();\r
204                    alert(fields.join('\n'));\r
205                 }\r
206                 return isValid;\r
207             }]]>\r
208          </javascript>\r
209 \r
210       </validator>\r
211 \r
212 \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
221               depends=""\r
222                   msg="errors.invalid">\r
223 \r
224          <javascript><![CDATA[\r
225             function validateMask(form) {\r
226                 var isValid = true;\r
227                 var focusField = null;\r
228                 var i = 0;\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
233                     \r
234                     if ((field.type == 'text' || \r
235                          field.type == 'textarea') && \r
236                          (field.value.length > 0)) {\r
237                         \r
238                         if (!matchPattern(field.value, oMasked[x][2]("mask"))) {\r
239                             if (i == 0) {\r
240                                 focusField = field;\r
241                             }\r
242                             fields[i++] = oMasked[x][1];\r
243                             isValid = false;\r
244                         }\r
245                     }\r
246                 }\r
247                 \r
248                 if (fields.length > 0) {\r
249                    focusField.focus();\r
250                    alert(fields.join('\n'));\r
251                 }\r
252                 return isValid;\r
253             }\r
254 \r
255             function matchPattern(value, mask) {\r
256                return mask.exec(value);\r
257             }]]>\r
258          </javascript>\r
259 \r
260       </validator>\r
261 \r
262 \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
271               depends=""\r
272                   msg="errors.byte"\r
273        jsFunctionName="ByteValidations">\r
274 \r
275          <javascript><![CDATA[\r
276             function validateByte(form) {\r
277                 var bValid = true;\r
278                 var focusField = null;\r
279                 var i = 0;\r
280                 var fields = new Array();\r
281                 oByte = new ByteValidations();\r
282                 for (x in oByte) {\r
283                         var field = form[oByte[x][0]];\r
284                         \r
285                     if (field.type == 'text' ||\r
286                         field.type == 'textarea' ||\r
287                         field.type == 'select-one' ||\r
288                                                 field.type == 'radio') {\r
289 \r
290                                                 var value = '';\r
291                                                 // get field's value\r
292                                                 if (field.type == "select-one") {\r
293                                                         var si = field.selectedIndex;\r
294                                                         if (si >= 0) {\r
295                                                                 value = field.options[si].value;\r
296                                                         }\r
297                                                 } else {\r
298                                                         value = field.value;\r
299                                                 }\r
300                         \r
301                         if (value.length > 0) {\r
302                             if (!isAllDigits(value)) {\r
303                                 bValid = false;\r
304                                 if (i == 0) {\r
305                                     focusField = field;\r
306                                 }\r
307                                 fields[i++] = oByte[x][1];\r
308 \r
309                             } else {\r
310 \r
311                                     var iValue = parseInt(value);\r
312                                     if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {\r
313                                         if (i == 0) {\r
314                                             focusField = field;\r
315                                         }\r
316                                         fields[i++] = oByte[x][1];\r
317                                         bValid = false;\r
318                                     }\r
319                             }\r
320                                                 }\r
321                                                 \r
322                     }\r
323                 }\r
324                 if (fields.length > 0) {\r
325                    focusField.focus();\r
326                    alert(fields.join('\n'));\r
327                 }\r
328                 return bValid;\r
329             }]]>\r
330          </javascript>\r
331 \r
332       </validator>\r
333 \r
334 \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
343               depends=""\r
344                   msg="errors.short"\r
345        jsFunctionName="ShortValidations">\r
346 \r
347          <javascript><![CDATA[\r
348             function validateShort(form) {\r
349                 var bValid = true;\r
350                 var focusField = null;\r
351                 var i = 0;\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
356                         \r
357                     if (field.type == 'text' ||\r
358                         field.type == 'textarea' ||\r
359                         field.type == 'select-one' ||\r
360                         field.type == 'radio') {\r
361                         \r
362                         var value = '';\r
363                                                 // get field's value\r
364                                                 if (field.type == "select-one") {\r
365                                                         var si = field.selectedIndex;\r
366                                                         if (si >= 0) {\r
367                                                                 value = field.options[si].value;\r
368                                                         }\r
369                                                 } else {\r
370                                                         value = field.value;\r
371                                                 }\r
372                         \r
373                         if (value.length > 0) {\r
374                             if (!isAllDigits(value)) {\r
375                                 bValid = false;\r
376                                 if (i == 0) {\r
377                                     focusField = field;\r
378                                 }\r
379                                 fields[i++] = oShort[x][1];\r
380 \r
381                             } else {\r
382                         \r
383                                     var iValue = parseInt(value);\r
384                                     if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {\r
385                                         if (i == 0) {\r
386                                             focusField = field;\r
387                                         }\r
388                                         fields[i++] = oShort[x][1];\r
389                                         bValid = false;\r
390                                     }\r
391                                }\r
392                        }\r
393                     }\r
394                 }\r
395                 if (fields.length > 0) {\r
396                    focusField.focus();\r
397                    alert(fields.join('\n'));\r
398                 }\r
399                 return bValid;\r
400             }]]>\r
401          </javascript>\r
402 \r
403       </validator>\r
404 \r
405 \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
414               depends=""\r
415                   msg="errors.integer"\r
416        jsFunctionName="IntegerValidations">\r
417 \r
418          <javascript><![CDATA[\r
419             function validateInteger(form) {\r
420                 var bValid = true;\r
421                 var focusField = null;\r
422                 var i = 0;\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
427 \r
428                     if (field.type == 'text' ||\r
429                         field.type == 'textarea' ||\r
430                         field.type == 'select-one' ||\r
431                         field.type == 'radio') {\r
432                         \r
433                         var value = '';\r
434                                                 // get field's value\r
435                                                 if (field.type == "select-one") {\r
436                                                         var si = field.selectedIndex;\r
437                                                     if (si >= 0) {\r
438                                                             value = field.options[si].value;\r
439                                                     }\r
440                                                 } else {\r
441                                                         value = field.value;\r
442                                                 }\r
443                         \r
444                         if (value.length > 0) {\r
445                         \r
446                             if (!isAllDigits(value)) {\r
447                                 bValid = false;\r
448                                 if (i == 0) {\r
449                                         focusField = field;\r
450                                     }\r
451                                                         fields[i++] = oInteger[x][1];\r
452                                                         \r
453                             } else {\r
454                                     var iValue = parseInt(value);\r
455                                     if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {\r
456                                         if (i == 0) {\r
457                                             focusField = field;\r
458                                         }\r
459                                         fields[i++] = oInteger[x][1];\r
460                                         bValid = false;\r
461                                    }\r
462                            }\r
463                        }\r
464                     }\r
465                 }\r
466                 if (fields.length > 0) {\r
467                    focusField.focus();\r
468                    alert(fields.join('\n'));\r
469                 }\r
470                 return bValid;\r
471             }\r
472 \r
473             function isAllDigits(argvalue) {\r
474                 argvalue = argvalue.toString();\r
475                 var validChars = "0123456789";\r
476                 var startFrom = 0;\r
477                 if (argvalue.substring(0, 2) == "0x") {\r
478                    validChars = "0123456789abcdefABCDEF";\r
479                    startFrom = 2;\r
480                 } else if (argvalue.charAt(0) == "0") {\r
481                    validChars = "01234567";\r
482                    startFrom = 1;\r
483                 } else if (argvalue.charAt(0) == "-") {\r
484                     startFrom = 1;\r
485                 }\r
486                 \r
487                 for (var n = startFrom; n < argvalue.length; n++) {\r
488                     if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;\r
489                 }\r
490                 return true;\r
491             }]]>\r
492          </javascript>\r
493 \r
494       </validator>\r
495 \r
496 \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
505               depends=""\r
506                   msg="errors.long"/>\r
507 \r
508 \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
517               depends=""\r
518                   msg="errors.float"\r
519        jsFunctionName="FloatValidations">\r
520 \r
521          <javascript><![CDATA[\r
522             function validateFloat(form) {\r
523                 var bValid = true;\r
524                 var focusField = null;\r
525                 var i = 0;\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
530                         \r
531                     if (field.type == 'text' ||\r
532                         field.type == 'textarea' ||\r
533                         field.type == 'select-one' ||\r
534                         field.type == 'radio') {\r
535                         \r
536                         var value = '';\r
537                                                 // get field's value\r
538                                                 if (field.type == "select-one") {\r
539                                                         var si = field.selectedIndex;\r
540                                                         if (si >= 0) {\r
541                                                             value = field.options[si].value;\r
542                                                         }\r
543                                                 } else {\r
544                                                         value = field.value;\r
545                                                 }\r
546                         \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
551 \r
552                             if (!isAllDigits(joinedString)) {\r
553                                 bValid = false;\r
554                                 if (i == 0) {\r
555                                     focusField = field;\r
556                                 }\r
557                                 fields[i++] = oFloat[x][1];\r
558 \r
559                             } else {\r
560                                     var iValue = parseFloat(value);\r
561                                     if (isNaN(iValue)) {\r
562                                         if (i == 0) {\r
563                                             focusField = field;\r
564                                         }\r
565                                         fields[i++] = oFloat[x][1];\r
566                                         bValid = false;\r
567                                     }\r
568                             }\r
569                         }\r
570                     }\r
571                 }\r
572                 if (fields.length > 0) {\r
573                    focusField.focus();\r
574                    alert(fields.join('\n'));\r
575                 }\r
576                 return bValid;\r
577             }]]>\r
578          </javascript>\r
579 \r
580       </validator>\r
581 \r
582 \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
591               depends=""\r
592                   msg="errors.double"/>\r
593 \r
594 \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
603               depends=""\r
604                   msg="errors.date"\r
605        jsFunctionName="DateValidations">\r
606 \r
607          <javascript><![CDATA[\r
608             function validateDate(form) {\r
609                var bValid = true;\r
610                var focusField = null;\r
611                var i = 0;\r
612                var fields = new Array();\r
613                oDate = new DateValidations();\r
614                for (x in oDate) {\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
621                      var MONTH = "MM";\r
622                      var DAY = "dd";\r
623                      var YEAR = "yyyy";\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
638                          } else {\r
639                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
640                          }\r
641                          var matched = dateRegexp.exec(value);\r
642                          if(matched != null) {\r
643                             if (!isValidDate(matched[2], matched[1], matched[3])) {\r
644                                if (i == 0) {\r
645                                    focusField = form[oDate[x][0]];\r
646                                }\r
647                                fields[i++] = oDate[x][1];\r
648                                bValid =  false;\r
649                             }\r
650                          } else {\r
651                             if (i == 0) {\r
652                                 focusField = form[oDate[x][0]];\r
653                             }\r
654                             fields[i++] = oDate[x][1];\r
655                             bValid =  false;\r
656                          }\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
668                          } else {\r
669                              dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
670                          }\r
671                          var matched = dateRegexp.exec(value);\r
672                          if(matched != null) {\r
673                              if (!isValidDate(matched[1], matched[2], matched[3])) {\r
674                                  if (i == 0) {\r
675                                      focusField = form[oDate[x][0]];\r
676                                  }\r
677                                  fields[i++] = oDate[x][1];\r
678                                  bValid =  false;\r
679                               }\r
680                          } else {\r
681                              if (i == 0) {\r
682                                  focusField = form[oDate[x][0]];\r
683                              }\r
684                              fields[i++] = oDate[x][1];\r
685                              bValid =  false;\r
686                          }\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
698                          } else {\r
699                              dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");\r
700                          }\r
701                          var matched = dateRegexp.exec(value);\r
702                          if(matched != null) {\r
703                              if (!isValidDate(matched[3], matched[2], matched[1])) {\r
704                                  if (i == 0) {\r
705                                      focusField = form[oDate[x][0]];\r
706                                   }\r
707                                   fields[i++] = oDate[x][1];\r
708                                   bValid =  false;\r
709                               }\r
710                           } else {\r
711                               if (i == 0) {\r
712                                   focusField = form[oDate[x][0]];\r
713                               }\r
714                               fields[i++] = oDate[x][1];\r
715                               bValid =  false;\r
716                           }\r
717                      } else {\r
718                          if (i == 0) {\r
719                              focusField = form[oDate[x][0]];\r
720                          }\r
721                          fields[i++] = oDate[x][1];\r
722                          bValid =  false;\r
723                      }\r
724                   }\r
725                }\r
726                if (fields.length > 0) {\r
727                   focusField.focus();\r
728                   alert(fields.join('\n'));\r
729                }\r
730                return bValid;\r
731             }\r
732 \r
733             function isValidDate(day, month, year) {\r
734                 if (month < 1 || month > 12) {\r
735                     return false;\r
736                 }\r
737                 if (day < 1 || day > 31) {\r
738                     return false;\r
739                 }\r
740                 if ((month == 4 || month == 6 || month == 9 || month == 11) &&\r
741                     (day == 31)) {\r
742                     return false;\r
743                 }\r
744                 if (month == 2) {\r
745                     var leap = (year % 4 == 0 &&\r
746                                (year % 100 != 0 || year % 400 == 0));\r
747                     if (day>29 || (day == 29 && !leap)) {\r
748                         return false;\r
749                     }\r
750                 }\r
751                 return true;\r
752             }]]>\r
753          </javascript>\r
754 \r
755       </validator>\r
756 \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
766               depends="integer"\r
767                   msg="errors.range">\r
768 \r
769          <javascript><![CDATA[\r
770             function validateRange(form) {\r
771                 return validateIntRange(form);\r
772             }]]>\r
773          </javascript>\r
774 \r
775       </validator>\r
776 \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
785               depends="integer"\r
786                   msg="errors.range">\r
787 \r
788          <javascript><![CDATA[\r
789             function validateIntRange(form) {\r
790                 var isValid = true;\r
791                 var focusField = null;\r
792                 var i = 0;\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
797                     \r
798                     if ((field.type == 'text' ||\r
799                          field.type == 'textarea') &&\r
800                         (field.value.length > 0)) {\r
801                         \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
806                             if (i == 0) {\r
807                                 focusField = field;\r
808                             }\r
809                             fields[i++] = oRange[x][1];\r
810                             isValid = false;\r
811                         }\r
812                     }\r
813                 }\r
814                 if (fields.length > 0) {\r
815                     focusField.focus();\r
816                     alert(fields.join('\n'));\r
817                 }\r
818                 return isValid;\r
819             }]]>\r
820          </javascript>\r
821 \r
822       </validator>\r
823 \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
832               depends="float"\r
833                   msg="errors.range">\r
834 \r
835          <javascript><![CDATA[\r
836             function validateFloatRange(form) {\r
837                 var isValid = true;\r
838                 var focusField = null;\r
839                 var i = 0;\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
844                     \r
845                     if ((field.type == 'text' ||\r
846                          field.type == 'textarea') &&\r
847                         (field.value.length > 0)) {\r
848                         \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
853                             if (i == 0) {\r
854                                 focusField = field;\r
855                             }\r
856                             fields[i++] = oRange[x][1];\r
857                             isValid = false;\r
858                         }\r
859                     }\r
860                 }\r
861                 if (fields.length > 0) {\r
862                     focusField.focus();\r
863                     alert(fields.join('\n'));\r
864                 }\r
865                 return isValid;\r
866             }]]>\r
867          </javascript>\r
868 \r
869       </validator>\r
870 \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
879               depends=""\r
880                   msg="errors.creditcard">\r
881 \r
882          <javascript><![CDATA[\r
883             function validateCreditCard(form) {\r
884                 var bValid = true;\r
885                 var focusField = null;\r
886                 var i = 0;\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
894                             if (i == 0) {\r
895                                 focusField = form[oCreditCard[x][0]];\r
896                             }\r
897                             fields[i++] = oCreditCard[x][1];\r
898                             bValid = false;\r
899                         }\r
900                     }\r
901                 }\r
902                 if (fields.length > 0) {\r
903                     focusField.focus();\r
904                     alert(fields.join('\n'));\r
905                 }\r
906                 return bValid;\r
907             }\r
908 \r
909             /**\r
910              * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl\r
911              */\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
916                     var sum = 0;\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
920                             digit *= 2;\r
921                             if (digit > 9) digit -= 9;\r
922                         };\r
923                         sum += digit;\r
924                     };\r
925                     if (sum == 0) return false;\r
926                     if (sum % 10 == 0) return true;\r
927                 };\r
928                 return false;\r
929             }\r
930 \r
931             function isLuhnNum(argvalue) {\r
932                 argvalue = argvalue.toString();\r
933                 if (argvalue.length == 0) {\r
934                     return false;\r
935                 }\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
939                         return false;\r
940                     }\r
941                 }\r
942                 return true;\r
943             }]]>\r
944          </javascript>\r
945 \r
946       </validator>\r
947 \r
948 \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
957               depends=""\r
958                   msg="errors.email">\r
959 \r
960          <javascript><![CDATA[\r
961             function validateEmail(form) {\r
962                 var bValid = true;\r
963                 var focusField = null;\r
964                 var i = 0;\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
972                             if (i == 0) {\r
973                                 focusField = form[oEmail[x][0]];\r
974                             }\r
975                             fields[i++] = oEmail[x][1];\r
976                             bValid = false;\r
977                         }\r
978                     }\r
979                 }\r
980                 if (fields.length > 0) {\r
981                     focusField.focus();\r
982                     alert(fields.join('\n'));\r
983                 }\r
984                 return bValid;\r
985             }\r
986 \r
987             /**\r
988              * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),\r
989              * http://javascript.internet.com\r
990              */\r
991             function checkEmail(emailStr) {\r
992                if (emailStr.length == 0) {\r
993                    return true;\r
994                }\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
1006                    return false;\r
1007                }\r
1008                var user=matchArray[1];\r
1009                var domain=matchArray[2];\r
1010                if (user.match(userPat) == null) {\r
1011                    return false;\r
1012                }\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
1017                          return false;\r
1018                       }\r
1019                    }\r
1020                    return true;\r
1021                }\r
1022                var domainArray=domain.match(domainPat);\r
1023                if (domainArray == null) {\r
1024                    return false;\r
1025                }\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
1031                    return false;\r
1032                }\r
1033                if (len < 2) {\r
1034                    return false;\r
1035                }\r
1036                return true;\r
1037             }]]>\r
1038          </javascript>\r
1039 \r
1040       </validator>\r
1041 \r
1042    </global>\r
1043 \r
1044 </form-validation>\r