1(function ($) { 2 function FormValidation(options) { 3 this.options = $.extend({ 4 dataRequired: 'validate', 5 inputWrap: '.input-holder', 6 submitButton: '[type=submit]', 7 event: 'keyup change', 8 errorClass: 'error', 9 correctClass: 'correct', 10 successEvent: function () { 11 } 12 }, options); 13 this.init(); 14 } 15 16 FormValidation.prototype = { 17 init: function () { 18 this.findElements(); 19 this.events(); 20 }, 21 findElements: function () { 22 this.form = jQuery(this.options.holder); 23 this.requiredItems = this.form.find('[data-' + this.options.dataRequired + ']'); 24 this.submitButton = this.form.find(this.options.submitButton); 25 }, 26 events: function () { 27 var self = this; 28 self.requiredItems.on(self.options.event, function () { 29 var item = jQuery(this); 30 var val = item.val(); 31 self.validateInputs(item, val); 32 }); 33 self.form.on('submit', function () { 34 self.requiredItems.trigger('change'); // need for first load page with not empty form item 35 var result = self.checkValidate(); 36 self.form.data('flag', result); 37 if (!result) { 38 return false 39 } 40 }); 41 }, 42 validateInputs: function (item, value) { 43 switch (item.data(this.options.dataRequired)) { 44 case 'norequired' : 45 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 46 break; 47 case 'required' : 48 if (value === "") { 49 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 50 } else { 51 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 52 } 53 break; 54 case 'required-cfmpas' : 55 var password = $("#password").val(); 56 if (value === "") { 57 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 58 } else if (value != password) { 59 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 60 } else if (value !== "" && value === password) { 61 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 62 } 63 break; 64 case 'required-name' : 65 var txtReg = /^[A-Za-z0-9Ð-ЯÐа-ÑÑÒÒÐÑÐÑÐÑe ';()-+_=?,.!-/\n/]{2,25}$/; 66 if (!txtReg.test(value)) { 67 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 68 } else { 69 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 70 } 71 break; 72 case 'required-alfa' : 73 var txt = /^[A-Za-z0-9Ð-ЯÑÐÑÐÑÐÐÑÒÒa-Ñ '\n\s]{3,45}$/; 74 if(!txt.test(value)){ 75 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 76 } else { 77 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 78 } 79 break; 80 case 'required-email' : 81 var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i; 82 if (!pattern.test(value)) { 83 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 84 } else { 85 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 86 } 87 break; 88 case 'required-number': 89 var regNumber = /^[+]38 [0-9]{3} [0-9]{3} [0-9]{2} [0-9]{2}$/; 90 if (!regNumber.test(value) || value === "") { 91 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 92 } else { 93 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 94 } 95 break; 96 case 'required-phone': 97 var regNumber = /^[+][0-9]{2}[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}$/; 98 if (!regNumber.test(value) || value === "") { 99 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 100 } else { 101 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 102 } 103 break; 104 case 'required-email-phone': 105 var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}|[+]38 [0-9]{3} [0-9]{3} [0-9]{2} [0-9]{2}$/i; 106 if (!pattern.test(value)) { 107 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 108 } else { 109 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 110 } 111 break; 112 case 'required-textarea' : 113 var txtReg = /^[A-Za-z0-9Ð-ЯÑÐÑÐÑÐÐÑÒÒa-Ñ ':;()-+_=,.!-/\n/]{5,400}$/; 114 if(!txtReg.test(value)){ 115 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 116 } else { 117 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 118 } 119 break; 120 case 'required-numeric': 121 var regNumeric = /^[0-9]{3,10}$/; 122 if (!regNumeric.test(value) || value === "") { 123 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 124 } else { 125 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 126 } 127 break; 128 case 'required-num-sms': 129 var regNumeric = /^[a-z0-9]{1}$/; 130 if (!regNumeric.test(value) || value === "") { 131 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 132 } else { 133 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 134 } 135 break; 136 case 'required-select': 137 if (value === "") { 138 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 139 } else { 140 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 141 142 } 143 break; 144 case 'required-date': 145 var regDate = /^(0[1-9]|1\d|2\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$/; 146 if (!regDate.test(value) || value === "") { 147 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 148 } else { 149 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 150 } 151 break; 152 case 'required-url': 153 var regDate = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/; 154 if (!regDate.test(value) || value === "") { 155 item.closest(this.options.inputWrap).addClass(this.options.errorClass).removeClass(this.options.correctClass); 156 } else { 157 item.closest(this.options.inputWrap).removeClass(this.options.errorClass).addClass(this.options.correctClass); 158 } 159 break; 160 } 161 }, 162 checkValidate: function () { 163 var self = this; 164 if (self.requiredItems.length !== self.form.find('.' + this.options.correctClass).length) { 165 self.requiredItems.each(function () { 166 var item = jQuery(this); 167 var val = item.val(); 168 self.validateInputs(item, val); 169 }); 170 return false 171 } else { 172 if (typeof self.options.successEvent === 'function') { 173 self.options.successEvent(); 174 } 175 return true 176 } 177 } 178 }; 179 180 // jquery plugin 181 $.fn.formValidation = function (opt) { 182 return this.each(function () { 183 $(this).data('FormValidation', new FormValidation($.extend(opt, {holder: this}))); 184 });
185 }; 186})(jQuery);
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.