JavaScript验证库(1.0)

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

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

  1////common
  2
  3function 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
 41RTrim(string):去除右边的空格
 42
 43==================================================================
 44
 45*/
 46
 47function 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
 85Trim(string):去除前后空格
 86
 87==================================================================
 88
 89*/
 90
 91function Trim(str)
 92
 93{
 94
 95    return RTrim(LTrim(str));
 96
 97}
 98
 99 
100
101 
102
103 
104
105/*
106
107================================================================================
108
109XMLEncode(string):对字符串进行XML编码
110
111================================================================================
112
113*/
114
115function 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
149function 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
176IsInt(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
177
178功能:判断是否为整数、正整数、负整数、正整数+0、负整数+0
179
180*/
181
182function 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
354IsFloat(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
355
356功能:判断是否为浮点数、正浮点数、负浮点数、正浮点数+0、负浮点数+0
357
358*/
359
360function 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*/
525function 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
555function 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
583function 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
611function 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*/
638function 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*/
668function 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
  2function 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 


posted on 2005-07-13 17:15  DiviSoft  阅读(446)  评论(0)    收藏  举报

导航