Javascript验证库(1.0)

今儿个工作之余,写个这个验证库,以便于除在用ASP.NET之外的人的各位同仁,也能很快的编写验证当前表单里需要提交的数据格式.
当然,该验证库只对客户端有效!

调用的共用脚本public.js如下:

  1 // //common
  2
  3 function  LTrim(str)
  4
  5 {
  6
  7      var  whitespace  =   new  String( "  /t/n/r " );
  8
  9      var  s  =   new  String(str);
 10
 11     
 12
 13      if  (whitespace.indexOf(s.charAt( 0 ))  !=   - 1 )
 14
 15     {
 16
 17          var  j = 0 , i  =  s.length;
 18
 19          while  (j  <  i  &&  whitespace.indexOf(s.charAt(j))  !=   - 1 )
 20
 21         {
 22
 23             j ++ ;
 24
 25         }
 26
 27         s  =  s.substring(j, i);
 28
 29     }
 30
 31      return  s;
 32
 33 }
 34
 35  
 36
 37 /*
 38
 39 ==================================================================
 40
 41 RTrim(string):去除右边的空格
 42
 43 ==================================================================
 44
 45 */
 46
 47 function  RTrim(str)
 48
 49 {
 50
 51      var  whitespace  =   new  String( "  /t/n/r " );
 52
 53      var  s  =   new  String(str);
 54
 55  
 56
 57      if  (whitespace.indexOf(s.charAt(s.length - 1 ))  !=   - 1 )
 58
 59     {
 60
 61          var  i  =  s.length  -   1 ;
 62
 63          while  (i  >=   0   &&  whitespace.indexOf(s.charAt(i))  !=   - 1 )
 64
 65         {
 66
 67             i -- ;
 68
 69         }
 70
 71         s  =  s.substring( 0 , i + 1 );
 72
 73     }
 74
 75      return  s;
 76
 77 }
 78
 79  
 80
 81 /*
 82
 83 ==================================================================
 84
 85 Trim(string):去除前后空格
 86
 87 ==================================================================
 88
 89 */
 90
 91 function  Trim(str)
 92
 93 {
 94
 95      return  RTrim(LTrim(str));
 96
 97 }
 98
 99  
100
101  
102
103  
104
105 /*
106
107 ================================================================================
108
109 XMLEncode(string):对字符串进行XML编码
110
111 ================================================================================
112
113 */
114
115 function  XMLEncode(str)
116
117 {
118
119        str = Trim(str);
120
121        str = str.replace( " & " , " &amp; " );
122
123        str = str.replace( " < " , " &lt; " );
124
125        str = str.replace( " > " , " &gt; " );
126
127        str = str.replace( " ' " , " &apos; " );
128
129        str = str.replace( " / "" , " & quot; " );
130
131        return str;
132
133 }
134
135  
136
137 /*
138
139 ================================================================================
140
141 验证类函数
142
143 ================================================================================
144
145 */
146
147  
148
149 function IsEmpty(obj,strMsg)
150
151 {
152     obj=document.getElementsByName(obj).item(0);
153
154     if(Trim(obj.value)== "" )
155
156     {
157         if(null!=strMsg)
158         alert( " [ " +strMsg+ " ]不能为空。 " );        
159         else
160         alert( " 字段不能为空 " );
161
162         
163         if(obj.disabled==false && obj.readOnly==false)
164         {
165             obj.focus();
166         }
167         return false;
168     }
169     return true;
170 }
171
172  
173
174 /*
175
176 IsInt(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
177
178 功能:判断是否为整数、正整数、负整数、正整数+0、负整数+0
179
180 */
181
182 function IsInt(objStr,sign,zero)
183
184 {
185
186     var reg;    
187
188     var bolzero;    
189
190     
191
192     if(Trim(objStr)== "" )
193
194     {
195
196         return false;
197
198     }
199
200     else
201
202     {
203
204         objStr=objStr.toString();
205
206     }    
207
208     
209
210     if((sign==null)||(Trim(sign)== "" ))
211
212     {
213
214         sign= " +- " ;
215
216     }
217
218     
219
220     if((zero==null)||(Trim(zero)== "" ))
221
222     {
223
224         bolzero=false;
225
226     }
227
228     else
229
230     {
231
232         zero=zero.toString();
233
234         if(zero== " 0 " )
235
236         {
237
238             bolzero=true;
239
240         }
241
242         else
243
244         {
245
246             alert( " 检查是否包含0参数,只可为(空、 0 ) " );
247
248         }
249
250     }
251
252     
253
254     switch(sign)
255
256     {
257
258         case  " +- " :
259
260             //整数
261
262             reg=/(^-?|^/+?)/d+$/;            
263
264             break;
265
266         case  " + "
267
268             if(!bolzero)           
269
270             {
271
272                 //正整数
273
274                 reg=/^/+?[0-9]*[1-9][0-9]*$/;
275
276             }
277
278             else
279
280             {
281
282                 //正整数+0
283
284                 //reg=/^/+?/d+$/;
285
286                 reg=/^/+?[0-9]*[0-9][0-9]*$/;
287
288             }
289
290             break;
291
292         case  " - " :
293
294             if(!bolzero)
295
296             {
297
298                 //负整数
299
300                 reg=/^-[0-9]*[1-9][0-9]*$/;
301
302             }
303
304             else
305
306             {
307
308                 //负整数+0
309
310                 //reg=/^-/d+$/;
311
312                 reg=/^-[0-9]*[0-9][0-9]*$/;
313
314             }            
315
316             break;
317
318         default:
319
320             alert( " 检查符号参数,只可为(空、 + - ) " );
321
322             return false;
323
324             break;
325
326     }
327
328     
329
330     var r=objStr.match(reg);
331
332     if(r==null)
333
334     {
335
336         return false;
337
338     }
339
340     else
341
342     {        
343
344         return true;     
345
346     }
347
348 }
349
350  
351
352 /*
353
354 IsFloat(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
355
356 功能:判断是否为浮点数、正浮点数、负浮点数、正浮点数+0、负浮点数+0
357
358 */
359
360 function IsFloat(objStr,sign,zero)
361
362 {
363
364     var reg;    
365
366     var bolzero;    
367
368     
369
370     if(Trim(objStr)== "" )
371
372     {
373
374         return false;
375
376     }
377
378     else
379
380     {
381
382         objStr=objStr.toString();
383
384     }    
385
386     
387
388     if((sign==null)||(Trim(sign)== "" ))
389
390     {
391
392         sign= " +- " ;
393
394     }
395
396     
397
398     if((zero==null)||(Trim(zero)== "" ))
399
400     {
401
402         bolzero=false;
403
404     }
405
406     else
407
408     {
409
410         zero=zero.toString();
411
412         if(zero== " 0 " )
413
414         {
415
416             bolzero=true;
417
418         }
419
420         else
421
422         {
423
424             alert( " 检查是否包含0参数,只可为(空、 0 ) " );
425
426         }
427
428     }
429
430     
431
432     switch(sign)
433
434     {
435
436         case  " +- " :
437
438             //浮点数
439
440             reg=/^((-?|/+?)/d+)(/./d+)?$/;
441
442             break;
443
444         case  " + "
445
446             if(!bolzero)           
447
448             {
449
450                 //正浮点数
451
452                 reg=/^/+?(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
453
454             }
455
456             else
457
458             {
459
460                 //正浮点数+0
461
462                 reg=/^/+?/d+(/./d+)?$/;
463
464             }
465
466             break;
467
468         case  " - " :
469
470             if(!bolzero)
471
472             {
473
474                 //负浮点数
475
476                 reg=/^-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
477
478             }
479
480             else
481
482             {
483
484                 //负浮点数+0
485
486                 reg=/^((-/d+(/./d+)?)|(0+(/.0+)?))$/;
487
488             }            
489
490             break;
491
492         default:
493
494             alert( " 检查符号参数,只可为(空、 + - ) " );
495
496             return false;
497
498             break;
499
500     }
501
502     
503
504     var r=objStr.match(reg);
505
506     if(r==null)
507
508     {
509
510         return false;
511
512     }
513
514     else
515
516     {        
517
518         return true;     
519
520     }
521
522 }
523
524 /* 是否EMAIL 格式,daniel*/
525 function IsEmail(obj,strMsg)
526 {
527     var obj=document.getElementsByName(obj).item(0);
528   
529     objStr=obj.value;
530     
531     var reg=/^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/;   
532
533     var r=objStr.match(reg);
534
535     if(r==null)
536     {    
537         if(obj.disabled==false && obj.readOnly==false)
538         {
539             obj.focus();
540         }
541         if(null!=strMsg)
542         alert( " [ " +strMsg+ " ]格式不对,必须为EMAIL格式。 " );        
543         else
544         alert( " 字段格式不对 " );
545        return false;
546     }
547     else
548     {
549         return true;     
550     }
551 }
552
553 /* 是否超过最大长度 daniel*/
554
555 function IsOutMax(obj,len,strMsg)
556 {
557     var obj=document.getElementsByName(obj).item(0);
558   
559     objStr=obj.value;
560     
561     var r=objStr.length;
562     
563     if(r>len)
564     {    
565         if(obj.disabled==false && obj.readOnly==false)
566         {
567             obj.focus();
568         }
569         if(null!=strMsg)
570         alert( " [ " +strMsg+ " ]太长了,请精简文字。 " );        
571         else
572         alert( " 字段长度过长 " );
573        return false;
574     }
575     else
576     {
577         return true;     
578     }
579 }
580
581 /* 是否小于最小长度 daniel*/
582
583 function IsOutMin(obj,len,strMsg)
584 {
585     var obj=document.getElementsByName(obj).item(0);
586   
587     objStr=obj.value;
588     
589     var r=objStr.length;
590     
591     if(r<len)
592     {    
593         if(obj.disabled==false && obj.readOnly==false)
594         {
595             obj.focus();
596         }
597         if(null!=strMsg)
598         alert( " [ " +strMsg+ " ]文字太少了,请详细填写。 " );        
599         else
600         alert( " 字段长度过短 " );
601        return false;
602     }
603     else
604     {
605         return true;     
606     }
607 }
608
609 /* 是否足够长度 daniel*/
610
611 function IsFix(obj,len,strMsg)
612 {
613     var obj=document.getElementsByName(obj).item(0);
614   
615     objStr=obj.value;
616     
617     var r=objStr.length;
618     
619     if(r!=len)
620     {    
621         if(obj.disabled==false && obj.readOnly==false)
622         {
623             obj.focus();
624         }
625         if(null!=strMsg)
626         alert( " [ " +strMsg+ " ]文字长度必须为 " + len + " 个。 " );        
627         else
628         alert( " 字段长度必须为 " +len+ " 个. " );
629        return false;
630     }
631     else
632     {
633         return true;     
634     }
635 }
636
637 /* 是否数字 格式,daniel*/
638 function IsNumeric(obj,strMsg)
639 {
640     var obj=document.getElementsByName(obj).item(0);
641   
642     objStr=obj.value;
643     
644     var reg=/^/d*$/;   
645
646     var r=objStr.match(reg);
647
648     if(r==null)
649     {    
650         if(obj.disabled==false && obj.readOnly==false)
651         {
652             obj.focus();
653         }
654         if(null!=strMsg)
655         alert( " [ " +strMsg+ " ]必须为数字格式。 " );        
656         else
657         alert( " 字段格式必须为数字 " );
658        return false;
659     }
660     else
661     {
662         return true;     
663     }
664 }
665
666
667 /* 是否IP地址 格式,daniel*/
668 function IsIP(obj,strMsg)
669 {
670     var obj=document.getElementsByName(obj).item(0);
671   
672     objStr=obj.value;
673     
674     var reg=/^/d+/.+/d+/.+/d+/.+/d*$/; 
675
676     var r=objStr.match(reg);
677
678     if(r==null)
679     {    
680         if(obj.disabled==false && obj.readOnly==false)
681         {
682             obj.focus();
683         }
684         if(null!=strMsg)
685         alert( " [ " +strMsg+ " ]必须为为IP地址形式。 " );        
686         else
687         alert( " 字段格式必须为IP地址形式 " );
688        return false;
689     }
690     else
691     {
692         return true;     
693     }
694 }
695
696  
697  
698 ///

如上代码中,部分函数采用了CSDN的JAVASCRIPT通用库.

下面即为调用验证的formcheck函数,你可以把它放在需要调用的页里,也可以单独放置到某一个JS里.

  1
  2 function  formcheck()
  3 {
  4      var  bReturn = false ;
  5      // 需要判断的字段名称
  6      /* alert(document.getElementById("fldscope"));
  7     alert(typeof(document.getElementById("fldscope")));
  8     alert(typeof(document.form1.fldscope));
  9     
 10     alert(document.getElementById("fldscope").value);
 11     alert(document.getElementById("fldscope").tagName);@!!!!1
 12     
 13     return false; */
 14      // 只针对type=text ,hidden 有效,对于下拉菜单等还有问题
 15      var  arrKey = new  Array( " fldname " , " fldlinkman " ,
 16      " fldaddr " , " fldzipcode " , " fldphone " , " fldemail " ,
 17      " fldqq " , " fldmsn " , " fldarea " , " fldcity " ,
 18      " fldip "
 19     );    
 20      var  arrValue = new  Object();
 21      // arrValue 的格式要求,0:格式(是否可为空,MAIL,数字.最大字符数 最小字符数.),1:提示文字 
 22      // 类型名称 必须为5个字符,+其他如长度数
 23      // xnull 不允许为空,email必须mail格式,minln2最小2字符 ,maxln2最多2字符 numbe数字
 24      // fixln5 固定长度5 ipadd IP地址格式
 25      // 所有字段的类型,长短等配置
 26     arrValue[ " fldname " ] = new  Array( " xnull " , " 厂家名称 " );
 27     arrValue[ " fldlinkman " ] = new  Array( " xnull,minln6 " , " 联系人 " );
 28     
 29     arrValue[ " fldaddr " ] = new  Array( " xnull,maxln125 " , " 详细地址 " );
 30     arrValue[ " fldzipcode " ] = new  Array( " xnull,fixln6,numbe " , " 邮编 " );
 31     arrValue[ " fldphone " ] = new  Array( " xnull,minln5 " , " 电话号码 " );
 32         
 33     arrValue[ " fldemail " ] = new  Array( " xnull,email " , " Email " );
 34     
 35     arrValue[ " fldqq " ] = new  Array( " xnull,numbe " , " QQ " );
 36     arrValue[ " fldmsn " ] = new  Array( " xnull,email " , " MSN " );
 37     
 38     arrValue[ " fldarea " ] = new  Array( " xnull " , " 地区 " );
 39     arrValue[ " fldcity " ] = new  Array( " xnull " , " 所属推荐经销商 " );
 40      // arrValue["fldscope"]=new Array("xnull","规模");
 41     arrValue[ " fldip " ] = new  Array( " xnull,ipadd " , " IP " );
 42     
 43     
 44      for  ( var  i = 0 ; i < arrKey.length; i ++ )
 45     {
 46          if ( null != arrValue[arrKey[i]])
 47         {            
 48              var  strType = arrValue[arrKey[i]][ 0 ];
 49              if (strType.indexOf( " , " ) > 0 )
 50             {
 51                  var  arrType     = strType.split( " , " );
 52                  for ( var  j = 0 ;j < arrType.length;j ++ )
 53                 {    
 54                          switch (arrType[j].substr( 0 , 5 ))
 55                         {
 56                              case   " xnull " :
 57                             bReturn = IsEmpty(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 58                              break ;
 59                              case   " email " :
 60                             bReturn = IsEmail(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 61                              break ;
 62                              case   " minln " :
 63                             bReturn = IsOutMin(arrKey[i],arrType[j].substr( 5 ,arrType[j].length - 5 ),arrValue[arrKey[i]][ 1 ]);
 64                              break ;
 65                              case   " numbe " :
 66                             bReturn = IsNumeric(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 67                              break ;
 68                              case   " fixln " :
 69                             bReturn = IsFix(arrKey[i],arrType[j].substr( 5 ,arrType[j].length - 5 ),arrValue[arrKey[i]][ 1 ]);
 70                              break ;
 71                              case   " ipadd " :
 72                             bReturn = IsIP(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 73                              break ;
 74                              default :
 75                             
 76                              break ;    
 77                         }                
 78                          if ( false == bReturn) return   false ;                            
 79                         
 80                 }
 81             } else
 82             {
 83                          switch (strType)
 84                         {
 85                              case   " xnull " :
 86                             bReturn = IsEmpty(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 87                              break ;
 88                              case   " email " :
 89                             bReturn = IsEmail(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 90                              break ;
 91                              case   " minln " :
 92                             bReturn = IsOutMin(arrKey[i],arrType[j].substr( 5 ,arrType[j].length - 5 ),arrValue[arrKey[i]][ 1 ]);
 93                              break ;
 94                              case   " numbe " :
 95                             bReturn = IsNumeric(arrKey[i],arrValue[arrKey[i]][ 1 ]);
 96                              break ;
 97                              case   " fixln " :
 98                             bReturn = IsFix(arrKey[i],arrType[j].substr( 5 ,arrType[j].length - 5 ),arrValue[arrKey[i]][ 1 ]);
 99                              break ;
100                              case   " ipadd " :
101                             bReturn = IsIP(arrKey[i],arrValue[arrKey[i]][ 1 ]);
102                              break ;
103                             
104                              default :
105                             
106                              break ;    
107                         }            
108             }
109              if ( false == bReturn) return   false ;        
110         }
111         
112     } 
113     
114      return   true ;
115 }
116


该调用的函数必须放在 form表单头里.如
<form name="form1" method="post" action="submit.php" onSubmit="return formcheck();">

如此这般,你只需要对 arrKey,arrValue进行配置,即可以完成对各表单字段的验证.

注意 :
该1.0版本的验证库
已知BUG:
1.对表单中的text,hidden类型的inputbox有效,对于其他如下拉框暂时不起作用.
2.IP格式判断不是太准确,需要定位每个.之间的数字必须在3位内.

哪位高手,有好的意见或建议,请与我交流.zxc1017@msn.com 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
js-validator 是 Laravel 风格的 JavaScript 对象验证。使用 js-validator 来验证对象或者 JSON 是否符合规则非常方便,而且具有很好的可扩展性。举个例子var example = {       text: 'Hello world!',       date: '2015-07-07',       comments: null,     },     rules = {       text: 'required|string',       date: 'date|date_format:yyyy-MM-dd',       comments: 'integer',     }; console.log(Validator.validate(example, rules)); // => Object {status: "failed", field: "comments", rule: "integer"}基本用法引入validator.js(原生JavaScript)[removed] [removed]或[removed] [removed]初始化(非原生JavaScript)Node.jsnpm install ppoffice/js-validator --savevar validator = require('js-validator');RequireJSrequirejs(["../src/validator"], function(validator) {   ... });Sea.jsdefine(function (require, exports, module) {   var validator = require('./validator');   ... });制定验证规则对于同一个对象属性,你可以并列制定几个不同的规则进行限定,使用|作为不同规则间的分割符。var rules = {   text: 'required|string',   date: 'date|date_format:yyyy-MM-dd',   comments: 'integer', };验证validator.validate(object_to_be_tested, rules);如果待验证对象符合规则,validate函数返回true;否则返回带有验证状态、失败的属性和对应失败的规则信息的对象。添加验证器使用add方法为Validator添加验证器,第一个参数为验证器名称,第二个参数为验证方法,可以为正则表达式对象或者函数。当验证方法为函数时,其第一个参数必须为当前验证域的值,后面的参数根据需求而定,验证成功时结果返回true。validator.add('older_than', function (value, age) {   return value > age; });var rules = {   age: 'integer|older_than:17', };可用的验证规则验证规则规则含义accepted验证域必须为yes、on、1、或者true。 这个规则常用语验证“同意使用条款”表单。after:date验证的日期域的日期必须在指定日期之后。alpha验证域必须由纯英文字符组成。alpha_dash验证域必须由英文字符、数字、中划线或者下划线组成。alpha_num验证域必须由英文字符或者数字组成。array验证域必须为数组对象。before:date验证的日期域的日期必须在给定日期之前。between:min,max验证域的值必须在min和max之间,验证域可以是数字或者字符串。boolean验证域的值可以看作是布尔值,可以是true,false,1,0,"1","0",'1' and '0'。date验证域必须为日期字符串形式,可以被Date.parse方法解析。date_format:format验证域必须符合制定的日期格式,允许的日期格式参照源代码中的dateFormat方法。different:field验证域的值必须域指定域的值不同。digits:value验证域必须为数字,且其位数为给定的位数。digits_between:min,max验证域必须为数字,且其位数在min和max之间。email验证域必须为电子邮件地址格式。in:foo,bar,...验证域的值必须在给定的允许值列表中。integer验证值必须为整数。ip验证值必须为IP地址形式(支持IPv4与IPv6)。max:value验证域的值必须小于等于max,验证域可以是数字或者字符串。mimes:foo,bar,...验证值的扩展名必须在给定的扩展名列表中。min:value验证域的值必须大于等于min,验证域可以是数字或者字符串。not_in:foo,bar,...验证域的值必须不在给定的值列表中。numeric验证域必须为数字。regex验证域必须符合指定的正则表达式(JavaScript风格)。required验证域必须存在。required_if:field,value,...如果给定的域的值等于给定的值,验证域必须存在。这里的条件可以是多个域和值,它们之间的关系为“与”。required_with:foo,bar,...如果给定的域之中任何一个存在的话,验证域必须存在。required_with_all:foo,bar,...仅当所有给定的域存在时,验证域必须存在。required_without:foo,bar,...如果给定的域之中任何一个不存在的话,验证域必须存在。required_without_all:foo,bar,...仅当所有给定的所有域都不存在时,验证域必须存在。same验证域的值必须域指定域的值相同。size:value验证域的大小必须等于指定大小。对于字符串来说,验证域的字符串长度必须等于给定长度。对于数字来说,验证域的值必须等于给定值。string验证域必须为字符串。url验证域必须为URL地址。当前不支持含有非英文(中文等)字符的地址。测试文件入口./test/index.html     原生JavaScript支持测试./test/node.js        Node.js支持测试./test/requirejs.html RequireJS支持测试./test/seajs.html Sea.js支持测试 标签:jsvalidator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值