PageSourceSearch

https://manshing.com.hk/en/js/validator.class.js

js manshing.com.hk collected 2026-10-08 23:38:43 UTC 9,210 bytes, 437 lines download raw bytes

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.