1/* 2 ------------------------------------------------------------------------- 3 JavaScript Form Validator (gen_validatorv31.js) 4 Version 3.1 5 Copyright (C) 2003-2008 JavaScript-Coder.com. All rights reserved. 6 You can freely use this script in your Web pages. 7 You may adapt this script for your own needs, provided these opening credit 8 lines are kept intact. 9 10 The Form validation script is distributed free from JavaScript-Coder.com 11 For updates, please visit: 12 http://www.javascript-coder.com/html-form/javascript-form-validation.phtml 13 14 Questions & comments please send to [email protected] 15 ------------------------------------------------------------------------- 16*/ 17function Validator(frmname) 18{ 19 this.formobj=document.forms[frmname]; 20 if(!this.formobj) 21 { 22 alert("Error: couldnot get Form object "+frmname); 23 return; 24 } 25 if(this.formobj.onsubmit) 26 { 27 this.formobj.old_onsubmit = this.formobj.onsubmit; 28 this.formobj.onsubmit=null; 29 } 30 else 31 { 32 this.formobj.old_onsubmit = null; 33 } 34 this.formobj._sfm_form_name=frmname; 35 this.formobj.onsubmit=form_submit_handler; 36 this.addValidation = add_validation; 37 this.setAddnlValidationFunction=set_addnl_vfunction; 38 this.clearAllValidations = clear_all_validations; 39 this.disable_validations = false;//new 40 document.error_disp_handler = new sfm_ErrorDisplayHandler(); 41 this.EnableOnPageErrorDisplay=validator_enable_OPED; 42 this.EnableOnPageErrorDisplaySingleBox=validator_enable_OPED_SB; 43 this.show_errors_together=true; 44 this.EnableMsgsTogether=sfm_enable_show_msgs_together; 45} 46function set_addnl_vfunction(functionname) 47{ 48 this.formobj.addnlvalidation = functionname; 49} 50function sfm_enable_show_msgs_together() 51{ 52 this.show_errors_together=true; 53 this.formobj.show_errors_together=true; 54} 55function clear_all_validations() 56{ 57 for(var itr=0;itr < this.formobj.elements.length;itr++) 58 { 59 this.formobj.elements[itr].validationset = null; 60 } 61} 62function form_submit_handler() 63{ 64 var bRet = true; 65 document.error_disp_handler.clear_msgs(); 66 for(var itr=0;itr < this.elements.length;itr++) 67 { 68 if(this.elements[itr].validationset && 69 !this.elements[itr].validationset.validate()) 70 { 71 bRet = false; 72 } 73 if(!bRet && !this.show_errors_together) 74 { 75 break; 76 } 77 } 78 if(!bRet) 79 { 80 document.error_disp_handler.FinalShowMsg(); 81 return false; 82 } 83 84 if(this.addnlvalidation) 85 { 86 str =" var ret = "+this.addnlvalidation+"()"; 87 eval(str); 88 if(!ret) return ret; 89 } 90 return true; 91} 92function add_validation(itemname,descriptor,errstr) 93{ 94 var condition = null; 95 if(arguments.length > 3) 96 { 97 condition = arguments[3]; 98 } 99 if(!this.formobj) 100 { 101 alert("Error: The form object is not set properly"); 102 return; 103 }//if 104 var itemobj = this.formobj[itemname]; 105 if(itemobj.length && isNaN(itemobj.selectedIndex) ) 106 //for radio button; don't do for 'select' item 107 { 108 itemobj = itemobj[0]; 109 } 110 if(!itemobj) 111 { 112 alert("Error: Couldnot get the input object named: "+itemname); 113 return; 114 } 115 if(!itemobj.validationset) 116 { 117 itemobj.validationset = new ValidationSet(itemobj,this.show_errors_together); 118 } 119 itemobj.validationset.add(descriptor,errstr,condition); 120 itemobj.validatorobj=this; 121} 122function validator_enable_OPED() 123{ 124 document.error_disp_handler.EnableOnPageDisplay(false); 125} 126 127function validator_enable_OPED_SB() 128{ 129 document.error_disp_handler.EnableOnPageDisplay(true); 130} 131function sfm_ErrorDisplayHandler() 132{ 133 this.msgdisplay = new AlertMsgDisplayer(); 134 this.EnableOnPageDisplay= edh_EnableOnPageDisplay; 135 this.ShowMsg=edh_ShowMsg; 136 this.FinalShowMsg=edh_FinalShowMsg; 137 this.all_msgs=new Array(); 138 this.clear_msgs=edh_clear_msgs; 139} 140function edh_clear_msgs() 141{ 142 this.msgdisplay.clearmsg(this.all_msgs); 143 this.all_msgs = new Array(); 144} 145function edh_FinalShowMsg() 146{ 147 this.msgdisplay.showmsg(this.all_msgs); 148} 149function edh_EnableOnPageDisplay(single_box) 150{ 151 if(true == single_box) 152 { 153 this.msgdisplay = new SingleBoxErrorDisplay(); 154 } 155 else 156 { 157 this.msgdisplay = new DivMsgDisplayer(); 158 } 159} 160function edh_ShowMsg(msg,input_element) 161{ 162 163 var objmsg = new Array();
164 objmsg["input_element"] = input_element; 165 objmsg["msg"] = msg; 166 this.all_msgs.push(objmsg); 167} 168function AlertMsgDisplayer() 169{ 170 this.showmsg = alert_showmsg; 171 this.clearmsg=alert_clearmsg; 172} 173function alert_clearmsg(msgs) 174{ 175 176} 177function alert_showmsg(msgs) 178{ 179 var whole_msg=""; 180 var first_elmnt=null; 181 for(var m in msgs) 182 { 183 if(null == first_elmnt) 184 { 185 first_elmnt = msgs[m]["input_element"]; 186 } 187 whole_msg += msgs[m]["msg"] + "\n"; 188 } 189 190 alert(whole_msg); 191 192 if(null != first_elmnt) 193 { 194 first_elmnt.focus(); 195 } 196} 197function sfm_show_error_msg(msg,input_elmt) 198{ 199 document.error_disp_handler.ShowMsg(msg,input_elmt); 200} 201function SingleBoxErrorDisplay() 202{ 203 this.showmsg=sb_div_showmsg; 204 this.clearmsg=sb_div_clearmsg; 205} 206 207function sb_div_clearmsg(msgs) 208{ 209 var divname = form_error_div_name(msgs); 210 show_div_msg(divname,""); 211} 212 213function sb_div_showmsg(msgs) 214{ 215 var whole_msg="<ul>\n"; 216 for(var m in msgs) 217 { 218 whole_msg += "<li>" + msgs[m]["msg"] + "</li>\n"; 219 } 220 whole_msg += "</ul>"; 221 var divname = form_error_div_name(msgs); 222 show_div_msg(divname,whole_msg); 223} 224function form_error_div_name(msgs) 225{ 226 var input_element= null; 227 228 for(var m in msgs) 229 { 230 input_element = msgs[m]["input_element"]; 231 if(input_element){break;} 232 } 233 234 var divname =""; 235 if(input_element) 236 { 237 divname = input_element.form._sfm_form_name + "_errorloc"; 238 } 239 240 return divname; 241} 242function DivMsgDisplayer() 243{ 244 this.showmsg=div_showmsg; 245 this.clearmsg=div_clearmsg; 246} 247function div_clearmsg(msgs) 248{ 249 for(var m in msgs) 250 { 251 var divname = element_div_name(msgs[m]["input_element"]); 252 show_div_msg(divname,""); 253 } 254} 255function element_div_name(input_element) 256{ 257 var divname = input_element.form._sfm_form_name + "_" + 258 input_element.name + "_errorloc"; 259 260 divname = divname.replace(/[\[\]]/gi,""); 261 262 return divname; 263} 264function div_showmsg(msgs) 265{ 266 var whole_msg; 267 var first_elmnt=null; 268 for(var m in msgs) 269 { 270 if(null == first_elmnt) 271 { 272 first_elmnt = msgs[m]["input_element"]; 273 } 274 var divname = element_div_name(msgs[m]["input_element"]); 275 show_div_msg(divname,msgs[m]["msg"]); 276 } 277 if(null != first_elmnt) 278 { 279 first_elmnt.focus(); 280 } 281} 282function show_div_msg(divname,msgstring) 283{ 284 if(divname.length<=0) return false; 285 286 if(document.layers) 287 { 288 divlayer = document.layers[divname]; 289 if(!divlayer){return;} 290 divlayer.document.open(); 291 divlayer.document.write(msgstring); 292 divlayer.document.close(); 293 } 294 else 295 if(document.all) 296 { 297 divlayer = document.all[divname]; 298 if(!divlayer){return;} 299 divlayer.innerHTML=msgstring; 300 } 301 else 302 if(document.getElementById) 303 { 304 divlayer = document.getElementById(divname); 305 if(!divlayer){return;} 306 divlayer.innerHTML =msgstring; 307 } 308 divlayer.style.visibility="visible"; 309 return false; 310} 311function ValidationDesc(inputitem,desc,error,condition) 312{ 313 this.desc=desc; 314 this.error=error; 315 this.itemobj = inputitem; 316 this.condition = condition; 317 this.validate=vdesc_validate; 318} 319function vdesc_validate() 320{ 321 if(this.condition != null ) 322 { 323 if(!eval(this.condition)) 324 { 325 return true; 326 } 327 } 328 if(!validateInput(this.desc,this.itemobj,this.error)) 329 { 330 this.itemobj.validatorobj.disable_validations=true; 331 this.itemobj.focus(); 332 return false; 333 } 334 return true; 335} 336function ValidationSet(inputitem,msgs_together) 337{ 338 this.vSet=new Array(); 339 this.add= add_validationdesc; 340 this.validate= vset_validate; 341 this.itemobj = inputitem; 342 this.msgs_together = msgs_together; 343} 344function add_validationdesc(desc,error,condition) 345{ 346 this.vSet[this.vSet.length]= 347 new ValidationDesc(this.itemobj,desc,error,condition); 348} 349function vset_validate() 350{ 351 var bRet = true; 352 for(var itr=0;itr<this.vSet.length;itr++) 353 { 354 bRet = bRet && this.vSet[itr].validate(); 355 if(!bRet && !this.msgs_together) 356 { 357 break; 358 } 359 } 360 return bRet; 361} 362function validateEmail(email) 363{ 364 var splitted = email.match("^(.+)@(.+)$"); 365 if(splitted == null) return false;
366 if(splitted[1] != null ) 367 { 368 var regexp_user=/^\"?[\w-_\.]*\"?$/; 369 if(splitted[1].match(regexp_user) == null) return false; 370 } 371 if(splitted[2] != null) 372 { 373 var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/; 374 if(splitted[2].match(regexp_domain) == null) 375 { 376 var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/; 377 if(splitted[2].match(regexp_ip) == null) return false; 378 }// if 379 return true; 380 } 381return false; 382} 383 384function IsCheckSelected(objValue,chkValue) 385{ 386 var selected=false; 387 var objcheck = objValue.form.elements[objValue.name]; 388 if(objcheck.length) 389 { 390 var idxchk=-1; 391 for(var c=0;c < objcheck.length;c++) 392 { 393 if(objcheck[c].value == chkValue) 394 { 395 idxchk=c; 396 break; 397 }//if 398 }//for 399 if(idxchk>= 0) 400 { 401 if(objcheck[idxchk].checked=="1") 402 { 403 selected=true; 404 } 405 }//if 406 } 407 else 408 { 409 if(objValue.checked == "1") 410 { 411 selected=true; 412 }//if 413 }//else 414 415 return selected; 416} 417function TestDontSelectChk(objValue,chkValue,strError) 418{ 419 var pass = true; 420 pass = IsCheckSelected(objValue,chkValue)?false:true; 421 422 if(pass==false) 423 { 424 if(!strError || strError.length ==0) 425 { 426 strError = "Can't Proceed as you selected "+objValue.name; 427 }//if 428 sfm_show_error_msg(strError,objValue); 429 430 } 431 return pass; 432} 433function TestShouldSelectChk(objValue,chkValue,strError) 434{ 435 var pass = true; 436 437 pass = IsCheckSelected(objValue,chkValue)?true:false; 438 439 if(pass==false) 440 { 441 if(!strError || strError.length ==0) 442 { 443 strError = "You should select"+objValue.name; 444 }//if 445 sfm_show_error_msg(strError,objValue); 446 447 } 448 return pass; 449} 450function TestRequiredInput(objValue,strError) 451{ 452 var ret = true; 453 if(eval(objValue.value.length) == 0) 454 { 455 if(!strError || strError.length ==0) 456 { 457 strError = objValue.name + " : Required Field"; 458 }//if 459 sfm_show_error_msg(strError,objValue); 460 ret=false; 461 }//if 462return ret; 463} 464function TestMaxLen(objValue,strMaxLen,strError) 465{ 466 var ret = true; 467 if(eval(objValue.value.length) > eval(strMaxLen)) 468 { 469 if(!strError || strError.length ==0) 470 { 471 strError = objValue.name + " : "+ strMaxLen +" characters maximum "; 472 }//if 473 sfm_show_error_msg(strError,objValue); 474 ret = false; 475 }//if 476return ret; 477} 478function TestMinLen(objValue,strMinLen,strError) 479{ 480 var ret = true; 481 if(eval(objValue.value.length) < eval(strMinLen)) 482 { 483 if(!strError || strError.length ==0) 484 { 485 strError = objValue.name + " : " + strMinLen + " characters minimum "; 486 }//if 487 sfm_show_error_msg(strError,objValue); 488 ret = false; 489 }//if 490return ret; 491} 492function TestInputType(objValue,strRegExp,strError,strDefaultError) 493{ 494 var ret = true; 495 496 var charpos = objValue.value.search(strRegExp); 497 if(objValue.value.length > 0 && charpos >= 0) 498 { 499 if(!strError || strError.length ==0) 500 { 501 strError = strDefaultError; 502 }//if 503 sfm_show_error_msg(strError,objValue); 504 ret = false; 505 }//if 506 return ret; 507} 508function TestEmail(objValue,strError) 509{ 510var ret = true; 511 if(objValue.value.length > 0 && !validateEmail(objValue.value) ) 512 { 513 if(!strError || strError.length ==0) 514 { 515 strError = objValue.name+": Enter a valid Email address "; 516 }//if 517 sfm_show_error_msg(strError,objValue); 518 ret = false; 519 }//if 520return ret; 521} 522function TestLessThan(objValue,strLessThan,strError) 523{ 524var ret = true; 525 if(isNaN(objValue.value)) 526 { 527 sfm_show_error_msg(objValue.name +": Should be a number ",objValue); 528 ret = false; 529 }//if 530 else 531 if(eval(objValue.value) >= eval(strLessThan)) 532 { 533 if(!strError || strError.length ==0) 534 { 535 strError = objValue.name + " : value should be less than "+ strLessThan; 536 }//if 537 sfm_show_error_msg(strError,objValue); 538 ret = false; 539 }//if 540return ret; 541} 542function TestGreaterThan(objValue,strGreaterThan,strError) 543{ 544var ret = true; 545 if(isNaN(objValue.value)) 546 { 547 sfm_show_error_msg(objValue.name+": Should be a number ",objValue); 548 ret = false; 549 }//if 550 else 551 if(eval(objValue.value) <= eval(strGreaterThan)) 552 { 553 if(!strError || strError.length ==0) 554 { 555 strError = objValue.name + " : value should be greater than "+ strGreaterThan; 556 }//if 557 sfm_show_error_msg(strError,objValue); 558 ret = false;
559 }//if 560return ret; 561} 562function TestRegExp(objValue,strRegExp,strError) 563{ 564var ret = true; 565 if( objValue.value.length > 0 && 566 !objValue.value.match(strRegExp) ) 567 { 568 if(!strError || strError.length ==0) 569 { 570 strError = objValue.name+": Invalid characters found "; 571 }//if 572 sfm_show_error_msg(strError,objValue); 573 ret = false; 574 }//if 575return ret; 576} 577function TestDontSelect(objValue,dont_sel_value,strError) 578{ 579var ret = true; 580 if(objValue.value == null) 581 { 582 sfm_show_error_msg("Error: dontselect command for non-select Item",objValue); 583 ret = false; 584 } 585 else 586 if(objValue.value == dont_sel_value) 587 { 588 if(!strError || strError.length ==0) 589 { 590 strError = objValue.name+": Please Select one option "; 591 }//if 592 sfm_show_error_msg(strError,objValue); 593 ret = false; 594 } 595return ret; 596} 597function TestSelectOneRadio(objValue,strError) 598{ 599 var objradio = objValue.form.elements[objValue.name]; 600 var one_selected=false; 601 for(var r=0;r < objradio.length;r++) 602 { 603 if(objradio[r].checked == "1") 604 { 605 one_selected=true; 606 break; 607 } 608 } 609 if(false == one_selected) 610 { 611 if(!strError || strError.length ==0) 612 { 613 strError = "Please select one option from "+objValue.name; 614 } 615 sfm_show_error_msg(strError,objValue); 616 } 617return one_selected; 618} 619 620function TestFileExtension(objValue,cmdvalue,strError) 621{ 622 var ret=false; 623 var found=false; 624 625 if(objValue.value.length <= 0) 626 {//The 'required' validation is not done here 627 return true; 628 } 629 630 var extns = cmdvalue.split(";"); 631 for(var i=0;i < extns.length;i++) 632 { 633 ext = objValue.value.substr(objValue.value.length - extns[i].length,extns[i].length); 634 ext = ext.toLowerCase(); 635 if(ext == extns[i]) 636 { 637 found=true;break; 638 } 639 } 640 if(!found) 641 { 642 if(!strError || strError.length ==0) 643 { 644 strError = objValue.name + " allowed file extensions are: "+cmdvalue; 645 }//if 646 sfm_show_error_msg(strError,objValue); 647 ret=false; 648 } 649 else 650 { 651 ret=true; 652 } 653 return ret; 654} 655 656 657function validateInput(strValidateStr,objValue,strError) 658{ 659 var ret = true; 660 var epos = strValidateStr.search("="); 661 var command = ""; 662 var cmdvalue = ""; 663 if(epos >= 0) 664 { 665 command = strValidateStr.substring(0,epos); 666 cmdvalue = strValidateStr.substr(epos+1); 667 } 668 else 669 { 670 command = strValidateStr; 671 } 672 switch(command) 673 { 674 case "req": 675 case "required": 676 { 677 ret = TestRequiredInput(objValue,strError) 678 break; 679 }//case required 680 case "maxlength": 681 case "maxlen": 682 { 683 ret = TestMaxLen(objValue,cmdvalue,strError) 684 break; 685 }//case maxlen 686 case "minlength": 687 case "minlen": 688 { 689 ret = TestMinLen(objValue,cmdvalue,strError) 690 break; 691 }//case minlen 692 case "alnum": 693 case "alphanumeric": 694 { 695 ret = TestInputType(objValue,"[^A-Za-z0-9]",strError, 696 objValue.name+": Only alpha-numeric characters allowed "); 697 break; 698 } 699 case "alnum_s": 700 case "alphanumeric_space": 701 { 702 ret = TestInputType(objValue,"[^A-Za-z0-9\\s]",strError, 703 objValue.name+": Only alpha-numeric characters and space allowed "); 704 break; 705 } 706 case "num": 707 case "numeric": 708 { 709 ret = TestInputType(objValue,"[^0-9]",strError, 710 objValue.name+": Only digits allowed "); 711 break; 712 } 713 case "alphabetic": 714 case "alpha": 715 { 716 ret = TestInputType(objValue,"[^A-Za-z]",strError, 717 objValue.name+": Only alphabetic characters allowed "); 718 break; 719 } 720 case "alphabetic_space": 721 case "alpha_s": 722 { 723 ret = TestInputType(objValue,"[^A-Za-z\\s]",strError, 724 objValue.name+": Only alphabetic characters and space allowed "); 725 break; 726 } 727 case "email": 728 { 729 ret = TestEmail(objValue,strError); 730 break; 731 } 732 case "lt": 733 case "lessthan": 734 { 735 ret = TestLessThan(objValue,cmdvalue,strError); 736 break; 737 } 738 case "gt": 739 case "greaterthan": 740 { 741 ret = TestGreaterThan(objValue,cmdvalue,strError); 742 break; 743 }//case greaterthan 744 case "regexp": 745 { 746 ret = TestRegExp(objValue,cmdvalue,strError); 747 break; 748 } 749 case "dontselect": 750 { 751 ret = TestDontSelect(objValue,cmdvalue,strError) 752 break; 753 } 754 case "dontselectchk": 755 { 756 ret = TestDontSelectChk(objValue,cmdvalue,strError) 757 break; 758 } 759 case "shouldselchk": 760 { 761 ret = TestShouldSelectChk(objValue,cmdvalue,strError) 762 break; 763 } 764 case "selone_radio": 765 { 766 ret = TestSelectOneRadio(objValue,strError); 767 break; 768 } 769 case "file_extn": 770 { 771 ret = TestFileExtension(objValue,cmdvalue,strError); 772 break; 773 } 774 }//switch 775 return ret; 776} 777function VWZ_IsListItemSelected(listname,value) 778{ 779 for(var i=0;i < listname.options.length;i++) 780 { 781 if(listname.options[i].selected == true && 782 listname.options[i].value == value) 783 { 784 return true; 785 } 786 } 787 return false;
788} 789function VWZ_IsChecked(objcheck,value) 790{ 791 if(objcheck.length) 792 { 793 for(var c=0;c < objcheck.length;c++) 794 { 795 if(objcheck[c].checked == "1" && 796 objcheck[c].value == value) 797 { 798 return true; 799 } 800 } 801 } 802 else 803 { 804 if(objcheck.checked == "1" ) 805 { 806 return true; 807 } 808 } 809 return false; 810} 811/* 812 Copyright (C) 2003-2008 JavaScript-Coder.com . All rights reserved. 813*/
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.