1/* 2 * Validator Class 3 * Copyright (c) 2016 Alvin So 4 * Version: 1.01 (06-Jun-2016) 5 */ 6function Validator(jQuery) { 7 var valid_status = true; 8 var error_key = null; 9 var $ = jQuery; 10 11 this.getValStatus = function(){ 12 return valid_status; 13 } 14 15 this.getErrorKey = function(){ 16 return error_key; 17 } 18 19 this.multiVal = function(input, case_arr, option){ 20 if(is_array(case_arr) && case_arr){ 21 UpdateErrorKey(null); 22 for(var key in case_arr){ 23 if(!this.val(input, case_arr[key], option)){ 24 UpdateErrorKey(key); 25 return false; 26 break; 27 } 28 } 29 return true; 30 }else{ 31 if (typeof option == "undefined") { 32 option = true; 33 } 34 if(option){ 35 UpdateValidStatus(false); 36 } 37 return false; 38 } 39 } 40 41 this.val = function(itemvalue, descriptor, option){ 42 if(is_array(descriptor)){ 43 return this.multiVal(itemvalue, descriptor, option); 44 } 45 if (typeof option == "undefined" || option == '') { 46 option = true; 47 } 48 var pos = descriptor.indexOf('='); 49 var command, cmdvalue; 50 if(pos !== -1){ 51 command = descriptor.substring(0, pos); 52 cmdvalue = descriptor.substring(pos + 1); 53 }else{ 54 command = descriptor; 55 } 56 var ret = true; 57 switch(command){ 58 case "req": 59 case "required": 60 { 61 ret = RequiredInput(itemvalue); 62 break; 63 } 64 case "maxlen": 65 case "maxlength": 66 { 67 ret = MaxLen(itemvalue,cmdvalue); 68 break; 69 } 70 case "minlen": 71 case "minlength": 72 { 73 ret = MinLen(itemvalue,cmdvalue); 74 break; 75 } 76 case "alnum": 77 case "alphanumeric": 78 { 79 ret = InputType(itemvalue,/^\w+$/g); 80 break; 81 } 82 case "alnum_s": 83 case "alphanumeric_space": 84 { 85 ret = InputType(itemvalue,/^\w+(\s?\w+)*$/g); 86 break; 87 } 88 case "num": 89 case "numeric": 90 { 91 ret = InputType(itemvalue,/^\-?\d+$/g); 92 break; 93 } 94 case "numdec": 95 case "numericdecimal": 96 { 97 ret = InputType(itemvalue,/^\-?\d+(\.\d+)?$/g); 98 break; 99 } 100 case "dec": 101 case "decimal": 102 { 103 ret = Decimal(itemvalue,cmdvalue); 104 break; 105 } 106 case "int": 107 case "integer": 108 { 109 ret = InputType(itemvalue,/^\d+$/g); 110 break; 111 } 112 case "alpha": 113 case "alphabetic": 114 { 115 ret = InputType(itemvalue,/^[A-Za-z]+$/g); 116 break; 117 } 118 case "alpha_s": 119 case "alphabetic_space": 120 { 121 ret = InputType(itemvalue,/^[A-Za-z]+(\s?[A-Za-z]+)*$/g); 122 break; 123 } 124 case "email": 125 { 126 ret = Email(itemvalue); 127 break; 128 } 129 case "lt":
130 case "lessthan": 131 { 132 ret = LessThan(itemvalue,cmdvalue); 133 break; 134 } 135 case "gt": 136 case "greaterthan": 137 { 138 ret = GreaterThan(itemvalue,cmdvalue); 139 break; 140 } 141 case "let": 142 case "lessorequalthan": 143 { 144 ret = LessOrEqualThan(itemvalue,cmdvalue); 145 break; 146 } 147 case "get": 148 case "greaterorequalthan": 149 { 150 ret = GreaterOrEqualThan(itemvalue,cmdvalue); 151 break; 152 } 153 case "dontselect": 154 { 155 ret = DontSelect(itemvalue,cmdvalue); 156 break; 157 } 158 case "shouldselect": 159 { 160 ret = ShouldSelect(itemvalue,cmdvalue); 161 break; 162 } 163 case "dontselectchk": 164 { 165 ret = DontSelectChk(itemvalue,cmdvalue); 166 break; 167 } 168 case "shouldselchk": 169 { 170 ret = ShouldSelectChk(itemvalue,cmdvalue); 171 break; 172 } 173 case "selone_radio": 174 { 175 ret = SelectOneRadio(itemvalue); 176 break; 177 } 178 case "selone_chk": 179 { 180 ret = SelectOneChk(itemvalue); 181 break; 182 } 183 case "equal": 184 { 185 ret = Equal(itemvalue,cmdvalue); 186 break; 187 } 188 case "notequal": 189 { 190 ret = NotEqual(itemvalue,cmdvalue); 191 break; 192 } 193 case "advancedontselect": 194 { 195 ret = AdvanceDontSelect(itemvalue,cmdvalue); 196 break; 197 } 198 case "remote": 199 { 200 ret = remote(itemvalue,cmdvalue); 201 break; 202 } 203 case "customize": 204 { 205 var strRegExp = new RegExp(cmdvalue, 'g'); 206 ret = InputType(itemvalue,strRegExp); 207 break; 208 } 209 } 210 if(option){ 211 UpdateValidStatus(ret); 212 } 213 return ret; 214 } 215 216 this.setValStatus = function(status){ 217 valid_status = status; 218 } 219 220 function UpdateValidStatus(status){ 221 if(valid_status && !status){ 222 valid_status = status; 223 } 224 } 225 226 function UpdateErrorKey(key){ 227 error_key = key; 228 } 229 230 function is_array(input){ 231 return typeof(input)=='object'&&(input instanceof Array); 232 } 233 234 function trim(input) { 235 return input.replace(/(^\s*)|(\s*$)$/g, ""); 236 } 237 238 function DontSelectChk(itemvalue,chkValue){ 239 if(IsCheckSelected(itemvalue,chkValue)){ 240 var ret = false;
241 }else{ 242 var ret = true; 243 } 244 return ret; 245 } 246 function ShouldSelectChk(itemvalue,chkValue){ 247 return IsCheckSelected(itemvalue,chkValue); 248 } 249 function RequiredInput(itemvalue){ 250 var ret = true; 251 itemvalue = trim(itemvalue); 252 value = itemvalue.replace(/^\s+|\s+$/g, ""); 253 if(value.length == 0){ 254 ret = false; 255 } 256 return ret; 257 } 258 function MaxLen(itemvalue,strMaxLen){ 259 var ret = true; 260 if(itemvalue.length > strMaxLen){ 261 ret = false; 262 } 263 return ret; 264 } 265 function MinLen(itemvalue,strMinLen){ 266 var ret = true; 267 if(itemvalue.length < strMinLen){ 268 ret = false; 269 } 270 return ret; 271 } 272 function InputType(itemvalue,strRegExp){ 273 return strRegExp.test(itemvalue); 274 } 275 function Decimal(itemvalue,point){ 276 var point_array = point.split(","); 277 var front = point_array[0]; 278 var behind = point_array[1]; 279 strRegExp = new RegExp('^\\d{1,' + front + '}(\\.\\d{1,' + behind + '})?$', 'g'); 280 return strRegExp.test(itemvalue); 281 } 282 function Email(itemvalue){ 283 var ret = true; 284 if(itemvalue.length > 0 && !validateEmail(itemvalue)){ 285 ret = false; 286 } 287 return ret; 288 } 289 function LessThan(itemvalue,strLessThan){ 290 var ret = true; 291 if(itemvalue == null){ 292 ret = false; 293 }else if(parseFloat(itemvalue) >= parseFloat(strLessThan)){ 294 ret = false; 295 } 296 return ret; 297 } 298 function GreaterThan(itemvalue,strGreaterThan){ 299 var ret = true; 300 if(itemvalue == null){ 301 ret = false; 302 }else if(parseFloat(itemvalue) <= parseFloat(strGreaterThan)){ 303 ret = false;
304 } 305 return ret; 306 } 307 function LessOrEqualThan(itemvalue,strLessThan){ 308 var ret = true; 309 if(itemvalue == null){ 310 ret = false; 311 }else if(parseFloat(itemvalue) > parseFloat(strLessThan)){ 312 ret = false; 313 } 314 return ret; 315 } 316 function GreaterOrEqualThan(itemvalue,strGreaterThan){ 317 var ret = true; 318 if(itemvalue == null){ 319 ret = false; 320 }else if(parseFloat(itemvalue) < parseFloat(strGreaterThan)){ 321 ret = false; 322 } 323 return ret; 324 } 325 function DontSelect(itemvalue,dont_sel_index){ 326 var ret = true; 327 if(itemvalue == null){ 328 ret = false; 329 } 330 if(itemvalue == dont_sel_index) { 331 ret = false; 332 } 333 return ret; 334 } 335 function ShouldSelect(itemvalue,should_sel_index){ 336 var ret = true; 337 if(itemvalue == null){ 338 ret = false; 339 } 340 if(itemvalue != should_sel_index){ 341 ret = false; 342 } 343 return ret; 344 } 345 function SelectOneRadio(itemvalue){ 346 var one_selected = false; 347 for(var r = 0;r < itemvalue.length;r++){ 348 if(itemvalue[r].checked){ 349 one_selected = true; 350 break; 351 } 352 } 353 return one_selected; 354 } 355 function SelectOneChk(itemvalue){ 356 var one_selected = false; 357 for(var r = 0;r < itemvalue.length;r++){ 358 if(itemvalue[r].checked){ 359 one_selected = true; 360 break; 361 } 362 } 363 return one_selected; 364 } 365 function Equal(itemvalue,objName){ 366 return itemvalue == objName; 367 } 368 function NotEqual(itemvalue,objName){ 369 return itemvalue != objName; 370 } 371 function AdvanceDontSelect(itemvalue,dont_sel_index){ 372 var ret = true; 373 dont_array = dont_sel_index.split(","); 374 var item = dont_array[0]; 375 var item2 = dont_array[1]; 376 var item2value = dont_array[2]; 377 if(itemvalue == null){ 378 ret = false;
379 } 380 if(itemvalue == item){ 381 if(item2 == item2value){ 382 ret = false; 383 } 384 } 385 return ret; 386 } 387 function validateEmail(email){ 388 return /^[a-zA-Z0-9\._\-]+@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/.test(email); 389 } 390 function IsCheckSelected(itemvalue,chkValue){ 391 var selected = false; 392 if(itemvalue.length){ 393 for(var key in itemvalue){ 394 if(itemvalue[key] == chkValue){ 395 selected=true; 396 break; 397 } 398 } 399 } 400 return selected; 401 } 402 function remote(itemvalue,condition){ 403 var ret = false; 404 if(typeof $ != "undefined"){ 405 var condition_array = condition.split(","); 406 var url = condition_array[0]; 407 var type = condition_array[1]; 408 condition_array.splice(0,2); 409 var data = arrayToObject(condition_array); 410 data['input'] = itemvalue; 411 $.ajax({ 412 url: url, 413 type: type, 414 data: data, 415 datatype: 'json', 416 async: false, 417 global: false, 418 success: function(response){ 419 if(response === "true"){ 420 ret = true; 421 }else{ 422 ret = false; 423 } 424 } 425 }); 426 } 427 return ret; 428 } 429 function arrayToObject(arr){ 430 var object = {}; 431 for(var i = 0; i < arr.length; i++){ 432 var tmp = arr[i].split("=") 433 object[tmp[0]] = (tmp[1] ? tmp[1] : ''); 434 } 435 return object; 436 } 437}
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.