Project

General

Profile

1
<!DOCTYPE form-validation PUBLIC
2
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
3
          "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
4
<!--
5

    
6
   This file contains the default Struts Validator pluggable validator
7
   definitions.  It should be placed somewhere under /WEB-INF and
8
   referenced in the struts-config.xml under the plug-in element
9
   for the ValidatorPlugIn.
10

    
11
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
12
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
13
                                                  /WEB-INF/validation.xml"/>
14
      </plug-in>
15

    
16
   These are the default error messages associated with
17
   each validator defined in this file.  They should be
18
   added to your projects ApplicationResources.properties
19
   file or you can associate new ones by modifying the
20
   pluggable validators msg attributes in this file.
21

    
22
   # Struts Validator Error Messages
23
   errors.required={0} is required.
24
   errors.minlength={0} can not be less than {1} characters.
25
   errors.maxlength={0} can not be greater than {1} characters.
26
   errors.invalid={0} is invalid.
27

    
28
   errors.byte={0} must be a byte.
29
   errors.short={0} must be a short.
30
   errors.integer={0} must be an integer.
31
   errors.long={0} must be a long.
32
   errors.float={0} must be a float.
33
   errors.double={0} must be a double.
34

    
35
   errors.date={0} is not a date.
36
   errors.range={0} is not in the range {1} through {2}.
37
   errors.creditcard={0} is an invalid credit card number.
38
   errors.email={0} is an invalid e-mail address.
39

    
40
-->
41

    
42
<form-validation>
43

    
44
   <global>
45

    
46
      <validator name="required"
47
            classname="org.apache.struts.validator.FieldChecks"
48
               method="validateRequired"
49
         methodParams="java.lang.Object,
50
                       org.apache.commons.validator.ValidatorAction,
51
                       org.apache.commons.validator.Field,
52
                       org.apache.struts.action.ActionErrors,
53
                       javax.servlet.http.HttpServletRequest"
54
                  msg="errors.required">
55

    
56
         <javascript><![CDATA[
57
            function validateRequired(form) {
58
                var isValid = true;
59
                var focusField = null;
60
                var i = 0;
61
                var fields = new Array();
62
                oRequired = new required();
63
                for (x in oRequired) {
64
                	var field = form[oRequired[x][0]];
65
                	
66
                    if (field.type == 'text' ||
67
                        field.type == 'textarea' ||
68
                        field.type == 'file' ||
69
                        field.type == 'select-one' ||
70
                        field.type == 'radio' ||
71
                        field.type == 'password') {
72
                        
73
                        var value = '';
74
						// get field's value
75
						if (field.type == "select-one") {
76
							var si = field.selectedIndex;
77
							if (si >= 0) {
78
								value = field.options[si].value;
79
							}
80
						} else {
81
							value = field.value;
82
						}
83
                        
84
                        if (trim(value).length == 0) {
85
                        
86
	                        if (i == 0) {
87
	                            focusField = field;
88
	                        }
89
	                        fields[i++] = oRequired[x][1];
90
	                        isValid = false;
91
                        }
92
                    }
93
                }
94
                if (fields.length > 0) {
95
                   focusField.focus();
96
                   alert(fields.join('\n'));
97
                }
98
                return isValid;
99
            }
100
            
101
            // Trim whitespace from left and right sides of s.
102
            function trim(s) {
103
                return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
104
            }
105
            
106
            ]]>
107
         </javascript>
108

    
109
      </validator>
110

    
111
      <validator name="requiredif"
112
                 classname="org.apache.struts.validator.FieldChecks"
113
                 method="validateRequiredIf"
114
                 methodParams="java.lang.Object,
115
                               org.apache.commons.validator.ValidatorAction,
116
                               org.apache.commons.validator.Field,
117
                               org.apache.struts.action.ActionErrors,
118
                               org.apache.commons.validator.Validator,
119
                               javax.servlet.http.HttpServletRequest"
120
                 msg="errors.required">
121
      </validator>
122

    
123
      <validator name="minlength"
124
            classname="org.apache.struts.validator.FieldChecks"
125
               method="validateMinLength"
126
         methodParams="java.lang.Object,
127
                       org.apache.commons.validator.ValidatorAction,
128
                       org.apache.commons.validator.Field,
129
                       org.apache.struts.action.ActionErrors,
130
                       javax.servlet.http.HttpServletRequest"
131
              depends=""
132
                  msg="errors.minlength">
133

    
134
         <javascript><![CDATA[
135
            function validateMinLength(form) {
136
                var isValid = true;
137
                var focusField = null;
138
                var i = 0;
139
                var fields = new Array();
140
                oMinLength = new minlength();
141
                for (x in oMinLength) {
142
                    var field = form[oMinLength[x][0]];
143
                    
144
                    if (field.type == 'text' ||
145
                        field.type == 'textarea') {
146
                        
147
                        var iMin = parseInt(oMinLength[x][2]("minlength"));
148
                        if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
149
                            if (i == 0) {
150
                                focusField = field;
151
                            }
152
                            fields[i++] = oMinLength[x][1];
153
                            isValid = false;
154
                        }
155
                    }
156
                }
157
                if (fields.length > 0) {
158
                   focusField.focus();
159
                   alert(fields.join('\n'));
160
                }
161
                return isValid;
162
            }]]>
163
         </javascript>
164

    
165
      </validator>
166

    
167

    
168
      <validator name="maxlength"
169
            classname="org.apache.struts.validator.FieldChecks"
170
               method="validateMaxLength"
171
         methodParams="java.lang.Object,
172
                       org.apache.commons.validator.ValidatorAction,
173
                       org.apache.commons.validator.Field,
174
                       org.apache.struts.action.ActionErrors,
175
                       javax.servlet.http.HttpServletRequest"
176
              depends=""
177
                  msg="errors.maxlength">
178

    
179
         <javascript><![CDATA[
180
            function validateMaxLength(form) {
181
                var isValid = true;
182
                var focusField = null;
183
                var i = 0;
184
                var fields = new Array();
185
                oMaxLength = new maxlength();
186
                for (x in oMaxLength) {
187
                    var field = form[oMaxLength[x][0]];
188
                    
189
                    if (field.type == 'text' ||
190
                        field.type == 'textarea') {
191
                        
192
                        var iMax = parseInt(oMaxLength[x][2]("maxlength"));
193
                        if (field.value.length > iMax) {
194
                            if (i == 0) {
195
                                focusField = field;
196
                            }
197
                            fields[i++] = oMaxLength[x][1];
198
                            isValid = false;
199
                        }
200
                    }
201
                }
202
                if (fields.length > 0) {
203
                   focusField.focus();
204
                   alert(fields.join('\n'));
205
                }
206
                return isValid;
207
            }]]>
208
         </javascript>
209

    
210
      </validator>
211

    
212

    
213
      <validator name="mask"
214
            classname="org.apache.struts.validator.FieldChecks"
215
               method="validateMask"
216
         methodParams="java.lang.Object,
217
                       org.apache.commons.validator.ValidatorAction,
218
                       org.apache.commons.validator.Field,
219
                       org.apache.struts.action.ActionErrors,
220
                       javax.servlet.http.HttpServletRequest"
221
              depends=""
222
                  msg="errors.invalid">
223

    
224
         <javascript><![CDATA[
225
            function validateMask(form) {
226
                var isValid = true;
227
                var focusField = null;
228
                var i = 0;
229
                var fields = new Array();
230
                oMasked = new mask();
231
                for (x in oMasked) {
232
                    var field = form[oMasked[x][0]];
233
                    
234
                    if ((field.type == 'text' || 
235
                         field.type == 'textarea') && 
236
                         (field.value.length > 0)) {
237
                        
238
                        if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
239
                            if (i == 0) {
240
                                focusField = field;
241
                            }
242
                            fields[i++] = oMasked[x][1];
243
                            isValid = false;
244
                        }
245
                    }
246
                }
247
                
248
                if (fields.length > 0) {
249
                   focusField.focus();
250
                   alert(fields.join('\n'));
251
                }
252
                return isValid;
253
            }
254

    
255
            function matchPattern(value, mask) {
256
               return mask.exec(value);
257
            }]]>
258
         </javascript>
259

    
260
      </validator>
261

    
262

    
263
      <validator name="byte"
264
            classname="org.apache.struts.validator.FieldChecks"
265
               method="validateByte"
266
         methodParams="java.lang.Object,
267
                       org.apache.commons.validator.ValidatorAction,
268
                       org.apache.commons.validator.Field,
269
                       org.apache.struts.action.ActionErrors,
270
                       javax.servlet.http.HttpServletRequest"
271
              depends=""
272
                  msg="errors.byte"
273
       jsFunctionName="ByteValidations">
274

    
275
         <javascript><![CDATA[
276
            function validateByte(form) {
277
                var bValid = true;
278
                var focusField = null;
279
                var i = 0;
280
                var fields = new Array();
281
                oByte = new ByteValidations();
282
                for (x in oByte) {
283
                	var field = form[oByte[x][0]];
284
                	
285
                    if (field.type == 'text' ||
286
                        field.type == 'textarea' ||
287
                        field.type == 'select-one' ||
288
						field.type == 'radio') {
289

    
290
						var value = '';
291
						// get field's value
292
						if (field.type == "select-one") {
293
							var si = field.selectedIndex;
294
							if (si >= 0) {
295
								value = field.options[si].value;
296
							}
297
						} else {
298
							value = field.value;
299
						}
300
                        
301
                        if (value.length > 0) {
302
                            if (!isAllDigits(value)) {
303
                                bValid = false;
304
                                if (i == 0) {
305
                                    focusField = field;
306
                                }
307
                                fields[i++] = oByte[x][1];
308

    
309
                            } else {
310

    
311
	                            var iValue = parseInt(value);
312
	                            if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
313
	                                if (i == 0) {
314
	                                    focusField = field;
315
	                                }
316
	                                fields[i++] = oByte[x][1];
317
	                                bValid = false;
318
	                            }
319
                            }
320
						}
321
						
322
                    }
323
                }
324
                if (fields.length > 0) {
325
                   focusField.focus();
326
                   alert(fields.join('\n'));
327
                }
328
                return bValid;
329
            }]]>
330
         </javascript>
331

    
332
      </validator>
333

    
334

    
335
      <validator name="short"
336
            classname="org.apache.struts.validator.FieldChecks"
337
               method="validateShort"
338
         methodParams="java.lang.Object,
339
                       org.apache.commons.validator.ValidatorAction,
340
                       org.apache.commons.validator.Field,
341
                       org.apache.struts.action.ActionErrors,
342
                       javax.servlet.http.HttpServletRequest"
343
              depends=""
344
                  msg="errors.short"
345
       jsFunctionName="ShortValidations">
346

    
347
         <javascript><![CDATA[
348
            function validateShort(form) {
349
                var bValid = true;
350
                var focusField = null;
351
                var i = 0;
352
                var fields = new Array();
353
                oShort = new ShortValidations();
354
                for (x in oShort) {
355
                	var field = form[oShort[x][0]];
356
                	
357
                    if (field.type == 'text' ||
358
                        field.type == 'textarea' ||
359
                        field.type == 'select-one' ||
360
                        field.type == 'radio') {
361
                        
362
                        var value = '';
363
						// get field's value
364
						if (field.type == "select-one") {
365
							var si = field.selectedIndex;
366
							if (si >= 0) {
367
								value = field.options[si].value;
368
							}
369
						} else {
370
							value = field.value;
371
						}
372
                        
373
                        if (value.length > 0) {
374
                            if (!isAllDigits(value)) {
375
                                bValid = false;
376
                                if (i == 0) {
377
                                    focusField = field;
378
                                }
379
                                fields[i++] = oShort[x][1];
380

    
381
                            } else {
382
                        
383
	                            var iValue = parseInt(value);
384
	                            if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
385
	                                if (i == 0) {
386
	                                    focusField = field;
387
	                                }
388
	                                fields[i++] = oShort[x][1];
389
	                                bValid = false;
390
	                            }
391
	                       }
392
                       }
393
                    }
394
                }
395
                if (fields.length > 0) {
396
                   focusField.focus();
397
                   alert(fields.join('\n'));
398
                }
399
                return bValid;
400
            }]]>
401
         </javascript>
402

    
403
      </validator>
404

    
405

    
406
      <validator name="integer"
407
            classname="org.apache.struts.validator.FieldChecks"
408
               method="validateInteger"
409
         methodParams="java.lang.Object,
410
                       org.apache.commons.validator.ValidatorAction,
411
                       org.apache.commons.validator.Field,
412
                       org.apache.struts.action.ActionErrors,
413
                       javax.servlet.http.HttpServletRequest"
414
              depends=""
415
                  msg="errors.integer"
416
       jsFunctionName="IntegerValidations">
417

    
418
         <javascript><![CDATA[
419
            function validateInteger(form) {
420
                var bValid = true;
421
                var focusField = null;
422
                var i = 0;
423
                var fields = new Array();
424
                oInteger = new IntegerValidations();
425
                for (x in oInteger) {
426
                	var field = form[oInteger[x][0]];
427

    
428
                    if (field.type == 'text' ||
429
                        field.type == 'textarea' ||
430
                        field.type == 'select-one' ||
431
                        field.type == 'radio') {
432
                        
433
                        var value = '';
434
						// get field's value
435
						if (field.type == "select-one") {
436
							var si = field.selectedIndex;
437
						    if (si >= 0) {
438
							    value = field.options[si].value;
439
						    }
440
						} else {
441
							value = field.value;
442
						}
443
                        
444
                        if (value.length > 0) {
445
                        
446
                            if (!isAllDigits(value)) {
447
                                bValid = false;
448
                                if (i == 0) {
449
	                                focusField = field;
450
	                            }
451
						        fields[i++] = oInteger[x][1];
452
						        
453
                            } else {
454
	                            var iValue = parseInt(value);
455
	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
456
	                                if (i == 0) {
457
	                                    focusField = field;
458
	                                }
459
	                                fields[i++] = oInteger[x][1];
460
	                                bValid = false;
461
	                           }
462
                           }
463
                       }
464
                    }
465
                }
466
                if (fields.length > 0) {
467
                   focusField.focus();
468
                   alert(fields.join('\n'));
469
                }
470
                return bValid;
471
            }
472

    
473
            function isAllDigits(argvalue) {
474
                argvalue = argvalue.toString();
475
                var validChars = "0123456789";
476
                var startFrom = 0;
477
                if (argvalue.substring(0, 2) == "0x") {
478
                   validChars = "0123456789abcdefABCDEF";
479
                   startFrom = 2;
480
                } else if (argvalue.charAt(0) == "0") {
481
                   validChars = "01234567";
482
                   startFrom = 1;
483
                } else if (argvalue.charAt(0) == "-") {
484
                    startFrom = 1;
485
                }
486
                
487
                for (var n = startFrom; n < argvalue.length; n++) {
488
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
489
                }
490
                return true;
491
            }]]>
492
         </javascript>
493

    
494
      </validator>
495

    
496

    
497
      <validator name="long"
498
            classname="org.apache.struts.validator.FieldChecks"
499
               method="validateLong"
500
         methodParams="java.lang.Object,
501
                       org.apache.commons.validator.ValidatorAction,
502
                       org.apache.commons.validator.Field,
503
                       org.apache.struts.action.ActionErrors,
504
                       javax.servlet.http.HttpServletRequest"
505
              depends=""
506
                  msg="errors.long"/>
507

    
508

    
509
      <validator name="float"
510
            classname="org.apache.struts.validator.FieldChecks"
511
               method="validateFloat"
512
         methodParams="java.lang.Object,
513
                       org.apache.commons.validator.ValidatorAction,
514
                       org.apache.commons.validator.Field,
515
                       org.apache.struts.action.ActionErrors,
516
                       javax.servlet.http.HttpServletRequest"
517
              depends=""
518
                  msg="errors.float"
519
       jsFunctionName="FloatValidations">
520

    
521
         <javascript><![CDATA[
522
            function validateFloat(form) {
523
                var bValid = true;
524
                var focusField = null;
525
                var i = 0;
526
                var fields = new Array();
527
                oFloat = new FloatValidations();
528
                for (x in oFloat) {
529
                	var field = form[oFloat[x][0]];
530
                	
531
                    if (field.type == 'text' ||
532
                        field.type == 'textarea' ||
533
                        field.type == 'select-one' ||
534
                        field.type == 'radio') {
535
                        
536
                    	var value = '';
537
						// get field's value
538
						if (field.type == "select-one") {
539
							var si = field.selectedIndex;
540
							if (si >= 0) {
541
							    value = field.options[si].value;
542
							}
543
						} else {
544
							value = field.value;
545
						}
546
                        
547
                        if (value.length > 0) {
548
                            // remove '.' before checking digits
549
                            var tempArray = value.split('.');
550
                            var joinedString= tempArray.join('');
551

    
552
                            if (!isAllDigits(joinedString)) {
553
                                bValid = false;
554
                                if (i == 0) {
555
                                    focusField = field;
556
                                }
557
                                fields[i++] = oFloat[x][1];
558

    
559
                            } else {
560
	                            var iValue = parseFloat(value);
561
	                            if (isNaN(iValue)) {
562
	                                if (i == 0) {
563
	                                    focusField = field;
564
	                                }
565
	                                fields[i++] = oFloat[x][1];
566
	                                bValid = false;
567
	                            }
568
                            }
569
                        }
570
                    }
571
                }
572
                if (fields.length > 0) {
573
                   focusField.focus();
574
                   alert(fields.join('\n'));
575
                }
576
                return bValid;
577
            }]]>
578
         </javascript>
579

    
580
      </validator>
581

    
582

    
583
      <validator name="double"
584
            classname="org.apache.struts.validator.FieldChecks"
585
               method="validateDouble"
586
         methodParams="java.lang.Object,
587
                       org.apache.commons.validator.ValidatorAction,
588
                       org.apache.commons.validator.Field,
589
                       org.apache.struts.action.ActionErrors,
590
                       javax.servlet.http.HttpServletRequest"
591
              depends=""
592
                  msg="errors.double"/>
593

    
594

    
595
      <validator name="date"
596
            classname="org.apache.struts.validator.FieldChecks"
597
               method="validateDate"
598
         methodParams="java.lang.Object,
599
                       org.apache.commons.validator.ValidatorAction,
600
                       org.apache.commons.validator.Field,
601
                       org.apache.struts.action.ActionErrors,
602
                       javax.servlet.http.HttpServletRequest"
603
              depends=""
604
                  msg="errors.date"
605
       jsFunctionName="DateValidations">
606

    
607
         <javascript><![CDATA[
608
            function validateDate(form) {
609
               var bValid = true;
610
               var focusField = null;
611
               var i = 0;
612
               var fields = new Array();
613
               oDate = new DateValidations();
614
               for (x in oDate) {
615
                   var value = form[oDate[x][0]].value;
616
                   var datePattern = oDate[x][2]("datePatternStrict");
617
                   if ((form[oDate[x][0]].type == 'text' ||
618
                        form[oDate[x][0]].type == 'textarea') &&
619
                       (value.length > 0) &&
620
                       (datePattern.length > 0)) {
621
                     var MONTH = "MM";
622
                     var DAY = "dd";
623
                     var YEAR = "yyyy";
624
                     var orderMonth = datePattern.indexOf(MONTH);
625
                     var orderDay = datePattern.indexOf(DAY);
626
                     var orderYear = datePattern.indexOf(YEAR);
627
                     if ((orderDay < orderYear && orderDay > orderMonth)) {
628
                         var iDelim1 = orderMonth + MONTH.length;
629
                         var iDelim2 = orderDay + DAY.length;
630
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
631
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
632
                         if (iDelim1 == orderDay && iDelim2 == orderYear) {
633
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
634
                         } else if (iDelim1 == orderDay) {
635
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
636
                         } else if (iDelim2 == orderYear) {
637
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
638
                         } else {
639
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
640
                         }
641
                         var matched = dateRegexp.exec(value);
642
                         if(matched != null) {
643
                            if (!isValidDate(matched[2], matched[1], matched[3])) {
644
                               if (i == 0) {
645
                                   focusField = form[oDate[x][0]];
646
                               }
647
                               fields[i++] = oDate[x][1];
648
                               bValid =  false;
649
                            }
650
                         } else {
651
                            if (i == 0) {
652
                                focusField = form[oDate[x][0]];
653
                            }
654
                            fields[i++] = oDate[x][1];
655
                            bValid =  false;
656
                         }
657
                     } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
658
                         var iDelim1 = orderDay + DAY.length;
659
                         var iDelim2 = orderMonth + MONTH.length;
660
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
661
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
662
                         if (iDelim1 == orderMonth && iDelim2 == orderYear) {
663
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
664
                         } else if (iDelim1 == orderMonth) {
665
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
666
                         } else if (iDelim2 == orderYear) {
667
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
668
                         } else {
669
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
670
                         }
671
                         var matched = dateRegexp.exec(value);
672
                         if(matched != null) {
673
                             if (!isValidDate(matched[1], matched[2], matched[3])) {
674
                                 if (i == 0) {
675
                                     focusField = form[oDate[x][0]];
676
                                 }
677
                                 fields[i++] = oDate[x][1];
678
                                 bValid =  false;
679
                              }
680
                         } else {
681
                             if (i == 0) {
682
                                 focusField = form[oDate[x][0]];
683
                             }
684
                             fields[i++] = oDate[x][1];
685
                             bValid =  false;
686
                         }
687
                     } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
688
                         var iDelim1 = orderYear + YEAR.length;
689
                         var iDelim2 = orderMonth + MONTH.length;
690
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
691
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
692
                         if (iDelim1 == orderMonth && iDelim2 == orderDay) {
693
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
694
                         } else if (iDelim1 == orderMonth) {
695
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
696
                         } else if (iDelim2 == orderDay) {
697
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
698
                         } else {
699
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
700
                         }
701
                         var matched = dateRegexp.exec(value);
702
                         if(matched != null) {
703
                             if (!isValidDate(matched[3], matched[2], matched[1])) {
704
                                 if (i == 0) {
705
                                     focusField = form[oDate[x][0]];
706
                                  }
707
                                  fields[i++] = oDate[x][1];
708
                                  bValid =  false;
709
                              }
710
                          } else {
711
                              if (i == 0) {
712
                                  focusField = form[oDate[x][0]];
713
                              }
714
                              fields[i++] = oDate[x][1];
715
                              bValid =  false;
716
                          }
717
                     } else {
718
                         if (i == 0) {
719
                             focusField = form[oDate[x][0]];
720
                         }
721
                         fields[i++] = oDate[x][1];
722
                         bValid =  false;
723
                     }
724
                  }
725
               }
726
               if (fields.length > 0) {
727
                  focusField.focus();
728
                  alert(fields.join('\n'));
729
               }
730
               return bValid;
731
            }
732

    
733
	    function isValidDate(day, month, year) {
734
	        if (month < 1 || month > 12) {
735
                    return false;
736
                }
737
                if (day < 1 || day > 31) {
738
                    return false;
739
                }
740
                if ((month == 4 || month == 6 || month == 9 || month == 11) &&
741
                    (day == 31)) {
742
                    return false;
743
                }
744
                if (month == 2) {
745
                    var leap = (year % 4 == 0 &&
746
                               (year % 100 != 0 || year % 400 == 0));
747
                    if (day>29 || (day == 29 && !leap)) {
748
                        return false;
749
                    }
750
                }
751
                return true;
752
            }]]>
753
         </javascript>
754

    
755
      </validator>
756

    
757
<!-- range is deprecated use intRange instead -->
758
      <validator name="range"
759
            classname="org.apache.struts.validator.FieldChecks"
760
               method="validateIntRange"
761
         methodParams="java.lang.Object,
762
                       org.apache.commons.validator.ValidatorAction,
763
                       org.apache.commons.validator.Field,
764
                       org.apache.struts.action.ActionErrors,
765
                       javax.servlet.http.HttpServletRequest"
766
              depends="integer"
767
                  msg="errors.range">
768

    
769
         <javascript><![CDATA[
770
            function validateRange(form) {
771
                return validateIntRange(form);
772
            }]]>
773
         </javascript>
774

    
775
      </validator>
776

    
777
      <validator name="intRange"
778
            classname="org.apache.struts.validator.FieldChecks"
779
               method="validateIntRange"
780
         methodParams="java.lang.Object,
781
                       org.apache.commons.validator.ValidatorAction,
782
                       org.apache.commons.validator.Field,
783
                       org.apache.struts.action.ActionErrors,
784
                       javax.servlet.http.HttpServletRequest"
785
              depends="integer"
786
                  msg="errors.range">
787

    
788
         <javascript><![CDATA[
789
            function validateIntRange(form) {
790
                var isValid = true;
791
                var focusField = null;
792
                var i = 0;
793
                var fields = new Array();
794
                oRange = new intRange();
795
                for (x in oRange) {
796
                    var field = form[oRange[x][0]];
797
                    
798
                    if ((field.type == 'text' ||
799
                         field.type == 'textarea') &&
800
                        (field.value.length > 0)) {
801
                        
802
                        var iMin = parseInt(oRange[x][2]("min"));
803
                        var iMax = parseInt(oRange[x][2]("max"));
804
                        var iValue = parseInt(field.value);
805
                        if (!(iValue >= iMin && iValue <= iMax)) {
806
                            if (i == 0) {
807
                                focusField = field;
808
                            }
809
                            fields[i++] = oRange[x][1];
810
                            isValid = false;
811
                        }
812
                    }
813
                }
814
                if (fields.length > 0) {
815
                    focusField.focus();
816
                    alert(fields.join('\n'));
817
                }
818
                return isValid;
819
            }]]>
820
         </javascript>
821

    
822
      </validator>
823

    
824
      <validator name="floatRange"
825
            classname="org.apache.struts.validator.FieldChecks"
826
               method="validateFloatRange"
827
         methodParams="java.lang.Object,
828
                       org.apache.commons.validator.ValidatorAction,
829
                       org.apache.commons.validator.Field,
830
                       org.apache.struts.action.ActionErrors,
831
                       javax.servlet.http.HttpServletRequest"
832
              depends="float"
833
                  msg="errors.range">
834

    
835
         <javascript><![CDATA[
836
            function validateFloatRange(form) {
837
                var isValid = true;
838
                var focusField = null;
839
                var i = 0;
840
                var fields = new Array();
841
                oRange = new floatRange();
842
                for (x in oRange) {
843
                    var field = form[oRange[x][0]];
844
                    
845
                    if ((field.type == 'text' ||
846
                         field.type == 'textarea') &&
847
                        (field.value.length > 0)) {
848
                        
849
                        var fMin = parseFloat(oRange[x][2]("min"));
850
                        var fMax = parseFloat(oRange[x][2]("max"));
851
                        var fValue = parseFloat(field.value);
852
                        if (!(fValue >= fMin && fValue <= fMax)) {
853
                            if (i == 0) {
854
                                focusField = field;
855
                            }
856
                            fields[i++] = oRange[x][1];
857
                            isValid = false;
858
                        }
859
                    }
860
                }
861
                if (fields.length > 0) {
862
                    focusField.focus();
863
                    alert(fields.join('\n'));
864
                }
865
                return isValid;
866
            }]]>
867
         </javascript>
868

    
869
      </validator>
870

    
871
      <validator name="creditCard"
872
            classname="org.apache.struts.validator.FieldChecks"
873
               method="validateCreditCard"
874
         methodParams="java.lang.Object,
875
                       org.apache.commons.validator.ValidatorAction,
876
                       org.apache.commons.validator.Field,
877
                       org.apache.struts.action.ActionErrors,
878
                       javax.servlet.http.HttpServletRequest"
879
              depends=""
880
                  msg="errors.creditcard">
881

    
882
         <javascript><![CDATA[
883
            function validateCreditCard(form) {
884
                var bValid = true;
885
                var focusField = null;
886
                var i = 0;
887
                var fields = new Array();
888
                oCreditCard = new creditCard();
889
                for (x in oCreditCard) {
890
                    if ((form[oCreditCard[x][0]].type == 'text' ||
891
                         form[oCreditCard[x][0]].type == 'textarea') &&
892
                        (form[oCreditCard[x][0]].value.length > 0)) {
893
                        if (!luhnCheck(form[oCreditCard[x][0]].value)) {
894
                            if (i == 0) {
895
                                focusField = form[oCreditCard[x][0]];
896
                            }
897
                            fields[i++] = oCreditCard[x][1];
898
                            bValid = false;
899
                        }
900
                    }
901
                }
902
                if (fields.length > 0) {
903
                    focusField.focus();
904
                    alert(fields.join('\n'));
905
                }
906
                return bValid;
907
            }
908

    
909
            /**
910
             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
911
             */
912
            function luhnCheck(cardNumber) {
913
                if (isLuhnNum(cardNumber)) {
914
                    var no_digit = cardNumber.length;
915
                    var oddoeven = no_digit & 1;
916
                    var sum = 0;
917
                    for (var count = 0; count < no_digit; count++) {
918
                        var digit = parseInt(cardNumber.charAt(count));
919
                        if (!((count & 1) ^ oddoeven)) {
920
                            digit *= 2;
921
                            if (digit > 9) digit -= 9;
922
                        };
923
                        sum += digit;
924
                    };
925
                    if (sum == 0) return false;
926
                    if (sum % 10 == 0) return true;
927
                };
928
                return false;
929
            }
930

    
931
            function isLuhnNum(argvalue) {
932
                argvalue = argvalue.toString();
933
                if (argvalue.length == 0) {
934
                    return false;
935
                }
936
                for (var n = 0; n < argvalue.length; n++) {
937
                    if ((argvalue.substring(n, n+1) < "0") ||
938
                        (argvalue.substring(n,n+1) > "9")) {
939
                        return false;
940
                    }
941
                }
942
                return true;
943
            }]]>
944
         </javascript>
945

    
946
      </validator>
947

    
948

    
949
      <validator name="email"
950
            classname="org.apache.struts.validator.FieldChecks"
951
               method="validateEmail"
952
         methodParams="java.lang.Object,
953
                       org.apache.commons.validator.ValidatorAction,
954
                       org.apache.commons.validator.Field,
955
                       org.apache.struts.action.ActionErrors,
956
                       javax.servlet.http.HttpServletRequest"
957
              depends=""
958
                  msg="errors.email">
959

    
960
         <javascript><![CDATA[
961
            function validateEmail(form) {
962
                var bValid = true;
963
                var focusField = null;
964
                var i = 0;
965
                var fields = new Array();
966
                oEmail = new email();
967
                for (x in oEmail) {
968
                    if ((form[oEmail[x][0]].type == 'text' ||
969
                         form[oEmail[x][0]].type == 'textarea') &&
970
                        (form[oEmail[x][0]].value.length > 0)) {
971
                        if (!checkEmail(form[oEmail[x][0]].value)) {
972
                            if (i == 0) {
973
                                focusField = form[oEmail[x][0]];
974
                            }
975
                            fields[i++] = oEmail[x][1];
976
                            bValid = false;
977
                        }
978
                    }
979
                }
980
                if (fields.length > 0) {
981
                    focusField.focus();
982
                    alert(fields.join('\n'));
983
                }
984
                return bValid;
985
            }
986

    
987
            /**
988
             * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
989
             * http://javascript.internet.com
990
             */
991
            function checkEmail(emailStr) {
992
               if (emailStr.length == 0) {
993
                   return true;
994
               }
995
               var emailPat=/^(.+)@(.+)$/;
996
               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
997
               var validChars="\[^\\s" + specialChars + "\]";
998
               var quotedUser="(\"[^\"]*\")";
999
               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
1000
               var atom=validChars + '+';
1001
               var word="(" + atom + "|" + quotedUser + ")";
1002
               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
1003
               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
1004
               var matchArray=emailStr.match(emailPat);
1005
               if (matchArray == null) {
1006
                   return false;
1007
               }
1008
               var user=matchArray[1];
1009
               var domain=matchArray[2];
1010
               if (user.match(userPat) == null) {
1011
                   return false;
1012
               }
1013
               var IPArray = domain.match(ipDomainPat);
1014
               if (IPArray != null) {
1015
                   for (var i = 1; i <= 4; i++) {
1016
                      if (IPArray[i] > 255) {
1017
                         return false;
1018
                      }
1019
                   }
1020
                   return true;
1021
               }
1022
               var domainArray=domain.match(domainPat);
1023
               if (domainArray == null) {
1024
                   return false;
1025
               }
1026
               var atomPat=new RegExp(atom,"g");
1027
               var domArr=domain.match(atomPat);
1028
               var len=domArr.length;
1029
               if ((domArr[domArr.length-1].length < 2) ||
1030
                   (domArr[domArr.length-1].length > 3)) {
1031
                   return false;
1032
               }
1033
               if (len < 2) {
1034
                   return false;
1035
               }
1036
               return true;
1037
            }]]>
1038
         </javascript>
1039

    
1040
      </validator>
1041

    
1042
   </global>
1043

    
1044
</form-validation>
(17-17/18)