转帖,js验证
1
*--------------- 客户端表单通用验证checkForm(oForm) -----------------
2
* 本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:
3
* 1.对非ie的支持
4
* 2.增加了内置表达式和内置提示
5
* 3.增加了显示方式(弹出式和页面显示式)
6
* 4.增加了显示一条和显示全部
7
* 5.进行了封装(CLASS_CHECK)
8
* 6.支持外接函数或表达式(应用在密码一致)
9
* 7.简化了调用方式,所有操作只需要<script language='javascript' src='checkform.js'>,
10
然后在HTML里定义各标签验证格式
11
* 8.对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)
12
* 9.增加了对disabled的不验证
13
* 10.自定义报警方式(重写showMessageEx方法)
14
*-----------------------------申明信息-----------------------------
15
*
16
* 作者: ttyp
17
* 邮箱: ttyp@21cn.com
18
* 博客: http://www.cnblogs.com/ttyp/
19
* 声明: 对本程序可以任意复制传播,但请保留这些声明,对于内置的表达式有些没有做到很严格,如果你
20
有好的建议和意见,欢迎邮件和我联系或者上我的博客留言
21![]()
22
* 简介:
23
本程序只需要对需要验证的标签设置三个属性:usage,exp,tip
24![]()
25
usage : 内置格式或表达式或函数
26
exp : 正则表达式(注意如果指定了usage则忽略exp)
27
tip : 出错提示(如果是内置格式可以不要此属性,有缺省提示)
28![]()
29
调用时只需要引用<script language='javascript' src='checkform.js'>,然后为每个标记
30
增加以上3个属性(不一定需要全部)
31![]()
32
* 原作者: wanghr100(灰豆宝宝.net)
33
* email: wanghr100@126.com
34
*
35
*--------------- 客户端表单通用验证checkForm(oForm) -----------------
36
*/
37
////////////////////////////////////////////////////////////////////////////////
38![]()
39![]()
40
function CLASS_CHECK()
41
{
42
this.pass = true; //是否通过验证
43
this.showAll = true; //是否显示所有的验证错误
44
this.alert = false; //报警方式(默认alert报警)
45
this.message = ""; //错误内容
46
this.first = null; //在显示全部验证错误时的第一个错误控件(用于回到焦点)
47![]()
48
//定义内置格式
49
var aUsage =
50
{
51
"int":"^([+-]?)\\d+$", //整数
52
"int+":"^([+]?)\\d+$", //正整数
53
"int-":"^-\\d+$", //负整数
54
"num":"^([+-]?)\\d*\\.?\\d+$", //数字
55
"num+":"^([+]?)\\d*\\.?\\d+$", //正数
56
"num-":"^-\\d*\\.?\\d+$", //负数
57
"float":"^([+-]?)\\d*\\.\\d+$", //浮点数
58
"float+":"^([+]?)\\d*\\.\\d+$", //正浮点数
59
"float-":"^-\\d*\\.\\d+$", //负浮点数
60
//邮件
61
"email":"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$",
62
"color":"^#[a-fA-F0-9]{6}", //颜色
63
"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //联接
64
"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", //仅中文
65
"ascii":"^[\\x00-\\xFF]+$", //仅ACSII字符
66
"zipcode":"^\\d{6}$", //邮编
67
"mobile":"^0{0,1}13[0-9]{9}$", //手机
68
"ip4":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}$", //ip地址
69
"notempty":"^\\S+$", //非空
70
"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片
71
"rar":"(.*)\\.(rar|zip|7zip|tgz)$", //压缩文件
72
"date":"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$" //日期
73
};
74![]()
75
//缺省消息
76
var aMessage =
77
{
78
"int" :"请输入整数", //整数
79
"int+" :"请输入正整数", //正整数
80
"int-" :"请输入负整数", //负整数
81
"num" :"请输入数字", //数字
82
"num+" :"请输入正数", //正数
83
"num-" :"请输入负整数", //负数
84
"float" :"请输入浮点数", //浮点数
85
"float+":"请输入正浮点数", //正浮点数
86
"float-":"请输入负浮点数", //负浮点数
87
"email" :"请输入正确的邮箱地址", //邮件
88
"color" :"请输入正确的颜色", //颜色
89
"url" :"请输入正确的连接地址", //联接
90
"chinese":"请输入中文", //中文
91
"ascii" :"请输入ascii字符", //仅ACSII字符
92
"zipcode":"请输入正确的邮政编码", //邮编
93
"mobile":"请输入正确的手机号码", //手机
94
"ip4" :"请输入正确的IP地址", //ip地址
95
"notempty":"不能为空", //非空
96
"picture":"请选择图片", //图片
97
"rar" :"请输入压缩文件", //压缩文件
98
"date" :"请输入正确的日期" //日期
99
}
100![]()
101
var me = this;
102![]()
103
function checkForm(oForm)
104
{
105
me.pass = true;
106
me.message = "";
107
me.first = null;
108
var els = oForm.elements;
109
//遍历所有表元素
110
for(var i=0;i<els.length;i++)
111
{
112
//取得格式
113
var sUsage = els[i].getAttribute("Usage");
114
var sReg = "";
115
116
//如果设置Usage,则使用内置正则表达式,忽略Exp
117
if(typeof(sUsage)!="undefined"&&sUsage!=null)
118
{
119
//如果Usage在表达室里找到,则使用内置表达式,无则认为是表达式;表达式可以是函数;
120
if(aUsage[sUsage]!=null)
121
{
122
sReg = aUsage[sUsage];
123
}
124
else
125
{
126
try
127
{
128
if(eval(sUsage)==false)
129
{
130
me.pass = false;
131
if(me.first==null)
132
{
133
me.first = els[i];
134
}
135![]()
136
addMessage(getMessage(els[i]));
137![]()
138
if(me.showAll==false)
139
{
140
setFocus(els[i]);
141
break;
142
}
143
}
144
}
145
catch(e)
146
{
147
alert("表达式[" + sUsage +"]错误:" + e.description)
148
return false;
149
}
150
}
151
}
152
else
153
{
154
sReg = els[i].getAttribute("Exp");
155
}
156![]()
157
if(typeof(sReg)!="undefined"&&sReg!=null)
158
{
159
//对于失效状态不验证
160
if(isDisabled(els[i])==true)
161
{
162
continue;
163
}
164![]()
165
//取得表单的值,用通用取值函数
166
var sVal = getValue(els[i]);
167
//字符串->正则表达式,不区分大小写
168
var reg = new RegExp(sReg,"i");
169
if(!reg.test(sVal))
170
{
171
me.pass = false;
172
if(me.first==null)
173
{
174
me.first = els[i];
175
}
176![]()
177
//alert(reg);
178
//验证不通过,弹出提示warning
179
var sTip = getMessage(els[i]);
180
if(sTip.length==0&&typeof(sUsage)!="undefined"&&sUsage!=null&&aMessage[sUsage]!=null)
181
{
182
sTip = aMessage[sUsage];
183
}
184
addMessage(sTip);
185![]()
186
if(me.showAll==false)
187
{
188
//该表单元素取得焦点,用通用返回函数
189
setFocus(els[i]);
190
break;
191
}
192![]()
193
}
194
}
195
}
196![]()
197
if(me.pass==false)
198
{
199
showMessage();
200![]()
201
if(me.first!=null&&me.showAll==true)
202
{
203
setFocus(me.first);
204
}
205
}
206![]()
207
return me.pass;
208
}
209![]()
210
/*
211
* 添加错误信息
212
*/
213
function addMessage(msg)
214
{
215
if(me.alert==true)
216
{
217
me.message += msg + "\n";
218
}
219
else
220
{
221
me.message += msg + "<br>";
222
}
223
}
224![]()
225
/*
226
* 显示错误
227
*/
228
function getMessage(els)
229
{
230
var sTip = els.getAttribute("tip");
231
if(typeof(sTip)!="undefined"&&sTip!=null)
232
{
233
return sTip;
234
}
235
else
236
{
237
return "";
238
}
239
}
240![]()
241![]()
242
/*
243
* 显示错误
244
*/
245
function showMessage()
246
{
247
//外接显示错误函数
248
if(typeof(me.showMessageEx)=="function")
249
{
250
return me.showMessageEx(me.message);
251
}
252![]()
253
if(me.alert==true)
254
{
255
alert(me.message);
256
}
257
else
258
{
259
var divTip;
260
divTip = document.getElementById("divErrorMessage");
261
try
262
{
263
if(typeof(divTip)=="undefined"||divTip==null)
264
{
265
divTip = document.createElement("div");
266
divTip.id = "divErrorMessage";
267
divTip.name = "divErrorMessage";
268
divTip.style.color = "red";
269
document.body.appendChild(divTip);
270
}
271![]()
272
divTip.innerHTML = me.message;
273
}catch(e){}
274
}
275
}
276![]()
277
/*
278
* 获得元素是否失效(失效的元素不做判断)
279
*/
280
function isDisabled(el)
281
{
282
//对于radio,checkbox元素,只要其中有一个非失效元素就验证
283
if(el.type=="radio"||el.type=="checkbox")
284
{
285
//取得第一个元素的name,搜索这个元素组
286
var tmpels = document.getElementsByName(el.name);
287
for(var i=0;i<tmpels.length;i++)
288
{
289
if(tmpels[i].disabled==false)
290
{
291
return false;
292
}
293
}
294
return true;
295
}
296
else
297
{
298
return el.disabled;
299
}
300
}
301![]()
302![]()
303
/*
304
* 取得对象的值(对于单选多选框把其选择的个数作为需要验证的值)
305
*/
306
function getValue(el)
307
{
308
//取得表单元素的类型
309
var sType = el.type;
310
switch(sType)
311
{
312
//文本输入框,直接取值el.value
313
case "text":
314
case "hidden":
315
case "password":
316
case "file":
317
case "textarea": return el.value;
318
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个,"00"表示选中两个
319
case "checkbox":
320
case "radio": return getRadioValue(el);
321
case "select-one":
322
case "select-multiple": return getSelectValue(el);
323
}
324
//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
325
function getRadioValue(el)
326
{
327
var sValue = "";
328
//取得第一个元素的name,搜索这个元素组
329
var tmpels = document.getElementsByName(el.name);
330
for(var i=0;i<tmpels.length;i++)
331
{
332
if(tmpels[i].checked)
333
{
334
sValue += "0";
335
}
336
}
337
return sValue;
338
}
339
//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
340
function getSelectValue(el)
341
{
342
var sValue = "";
343
for(var i=0;i<el.options.length;i++)
344
{
345
//单选下拉框提示选项设置为value=""
346
if(el.options[i].selected && el.options[i].value!="")
347
{
348
sValue += "0";
349
}
350
}
351
return sValue;
352
}
353
}
354![]()
355
/*
356
* 对没有通过验证的元素设置焦点
357
*/
358
function setFocus(el)
359
{
360
//取得表单元素的类型
361
var sType = el.type;
362
switch(sType)
363
{
364
//文本输入框,光标定位在文本输入框的末尾
365
case "text":
366
case "hidden":
367
case "password":
368
case "file":
369
case "textarea":
370
try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){};
371
break;
372
373
//单多选,第一选项非失效控件取得焦点
374
case "checkbox":
375
case "radio":
376
var els = document.getElementsByName(el.name);
377
for(var i=0;i<els.length;i++)
378
{
379
if(els[i].disabled == false)
380
{
381
els[i].focus();
382
break;
383
}
384
}
385
break;
386
case "select-one":
387
case "select-multiple":
388
el.focus();
389
break;
390
}
391
}
392![]()
393
394
//自动绑定到所有form的onsubmit事件
395
if(window.attachEvent)
396
{
397
window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms[i]; if(theFrom){theFrom.attachEvent("onsubmit",function(){return checkForm(theFrom);});}}});
398
}
399
else
400
{
401
window.onsubmit = function(e){var theFrom = e.target;if(theFrom){return checkForm(theFrom);}}
402
}
403![]()
404
this.keyCheck = function()
405
{
406
if(window.attachEvent)
407
{
408
window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms[i]; if(theFrom){myKeyCheck(theFrom);}}});
409
}
410
else
411
{
412
//TOOD
413
}
414![]()
415
function myKeyCheck(oForm)
416
{
417
var els = oForm.elements;
418
//遍历所有表元素
419
for(var i=0;i<els.length;i++)
420
{
421
//取得格式
422
var sUsage = els[i].getAttribute("Usage");
423
424
//如果设置Usage,则使用内置正则表达式,忽略Exp
425
if(typeof(sUsage)!="undefined"&&sUsage!=null)
426
{
427
switch(sUsage.toLowerCase ())
428
{
429
case "zipcode":
430
case "int":
431
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}
432
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
433
els[i].ondragenter = function(){return false;}
434
els[i].style.imeMode= "disabled";
435
break;
436
case "mobile":
437
case "int+":
438
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false);}
439
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
440
els[i].ondragenter = function(){return false;}
441
els[i].style.imeMode= "disabled";
442
break;
443
case "int-":
444
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}
445
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
446
els[i].ondragenter = function(){return false;}
447
els[i].style.imeMode= "disabled";
448
break;
449
case "float":
450
case "num":
451
els[i].onkeypress = function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));}
452
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
453
els[i].ondragenter = function(){return false;}
454
els[i].style.imeMode= "disabled";
455
break;
456
case "float+":
457
case "num+":
458
els[i].onkeypress = function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));}
459
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
460
els[i].ondragenter = function(){return false;}
461
els[i].style.imeMode= "disabled";
462
break;
463
case "float-":
464
case "num-":
465
els[i].onkeypress = function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));}
466
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
467
els[i].ondragenter = function(){return false;}
468
els[i].style.imeMode= "disabled";
469
break;
470
case "ascii":
471
els[i].style.imeMode= "disabled";
472
break;
473
case "ip4":
474
els[i].onkeypress = function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));}
475
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
476
els[i].ondragenter = function(){return false;}
477
els[i].style.imeMode= "disabled";
478
els[i].maxLength = 15;
479
break;
480
case "color":
481
els[i].onkeypress = function(){return /[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')<0?String.fromCharCode(event.keyCode)=="#":false);}
482
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
483
els[i].ondragenter = function(){return false;}
484
els[i].maxLength = 7;
485
els[i].style.imeMode= "disabled";
486
break;
487
case "date":
488
els[i].onkeypress = function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));}
489
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
490
els[i].ondragenter = function(){return false;}
491
els[i].style.imeMode= "disabled";
492
break;
493
}
494
}
495
}
496
}
497
}
498
}
499![]()
500
//初始化
501
var g_check = new CLASS_CHECK();
502
g_check.keyCheck();
503![]()
504![]()
505![]()
*--------------- 客户端表单通用验证checkForm(oForm) -----------------2
* 本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:3
* 1.对非ie的支持4
* 2.增加了内置表达式和内置提示5
* 3.增加了显示方式(弹出式和页面显示式)6
* 4.增加了显示一条和显示全部7
* 5.进行了封装(CLASS_CHECK)8
* 6.支持外接函数或表达式(应用在密码一致)9
* 7.简化了调用方式,所有操作只需要<script language='javascript' src='checkform.js'>,10
然后在HTML里定义各标签验证格式11
* 8.对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)12
* 9.增加了对disabled的不验证13
* 10.自定义报警方式(重写showMessageEx方法) 14
*-----------------------------申明信息-----------------------------15
*16
* 作者: ttyp17
* 邮箱: ttyp@21cn.com18
* 博客: http://www.cnblogs.com/ttyp/19
* 声明: 对本程序可以任意复制传播,但请保留这些声明,对于内置的表达式有些没有做到很严格,如果你20
有好的建议和意见,欢迎邮件和我联系或者上我的博客留言21

22
* 简介:23
本程序只需要对需要验证的标签设置三个属性:usage,exp,tip24

25
usage : 内置格式或表达式或函数26
exp : 正则表达式(注意如果指定了usage则忽略exp)27
tip : 出错提示(如果是内置格式可以不要此属性,有缺省提示)28

29
调用时只需要引用<script language='javascript' src='checkform.js'>,然后为每个标记30
增加以上3个属性(不一定需要全部)31

32
* 原作者: wanghr100(灰豆宝宝.net)33
* email: wanghr100@126.com34
*35
*--------------- 客户端表单通用验证checkForm(oForm) -----------------36
*/37
////////////////////////////////////////////////////////////////////////////////38

39

40
function CLASS_CHECK()41
{42
this.pass = true; //是否通过验证43
this.showAll = true; //是否显示所有的验证错误44
this.alert = false; //报警方式(默认alert报警)45
this.message = ""; //错误内容46
this.first = null; //在显示全部验证错误时的第一个错误控件(用于回到焦点)47

48
//定义内置格式49
var aUsage = 50
{51
"int":"^([+-]?)\\d+$", //整数52
"int+":"^([+]?)\\d+$", //正整数53
"int-":"^-\\d+$", //负整数54
"num":"^([+-]?)\\d*\\.?\\d+$", //数字55
"num+":"^([+]?)\\d*\\.?\\d+$", //正数56
"num-":"^-\\d*\\.?\\d+$", //负数57
"float":"^([+-]?)\\d*\\.\\d+$", //浮点数58
"float+":"^([+]?)\\d*\\.\\d+$", //正浮点数59
"float-":"^-\\d*\\.\\d+$", //负浮点数60
//邮件61
"email":"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", 62
"color":"^#[a-fA-F0-9]{6}", //颜色63
"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //联接64
"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", //仅中文65
"ascii":"^[\\x00-\\xFF]+$", //仅ACSII字符66
"zipcode":"^\\d{6}$", //邮编67
"mobile":"^0{0,1}13[0-9]{9}$", //手机68
"ip4":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}$", //ip地址69
"notempty":"^\\S+$", //非空70
"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片71
"rar":"(.*)\\.(rar|zip|7zip|tgz)$", //压缩文件72
"date":"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$" //日期73
};74

75
//缺省消息76
var aMessage =77
{78
"int" :"请输入整数", //整数79
"int+" :"请输入正整数", //正整数80
"int-" :"请输入负整数", //负整数81
"num" :"请输入数字", //数字82
"num+" :"请输入正数", //正数83
"num-" :"请输入负整数", //负数84
"float" :"请输入浮点数", //浮点数85
"float+":"请输入正浮点数", //正浮点数86
"float-":"请输入负浮点数", //负浮点数87
"email" :"请输入正确的邮箱地址", //邮件88
"color" :"请输入正确的颜色", //颜色89
"url" :"请输入正确的连接地址", //联接90
"chinese":"请输入中文", //中文91
"ascii" :"请输入ascii字符", //仅ACSII字符92
"zipcode":"请输入正确的邮政编码", //邮编93
"mobile":"请输入正确的手机号码", //手机94
"ip4" :"请输入正确的IP地址", //ip地址95
"notempty":"不能为空", //非空96
"picture":"请选择图片", //图片97
"rar" :"请输入压缩文件", //压缩文件98
"date" :"请输入正确的日期" //日期99
}100

101
var me = this;102

103
function checkForm(oForm)104
{105
me.pass = true;106
me.message = "";107
me.first = null;108
var els = oForm.elements;109
//遍历所有表元素110
for(var i=0;i<els.length;i++)111
{112
//取得格式113
var sUsage = els[i].getAttribute("Usage"); 114
var sReg = "";115
116
//如果设置Usage,则使用内置正则表达式,忽略Exp117
if(typeof(sUsage)!="undefined"&&sUsage!=null)118
{119
//如果Usage在表达室里找到,则使用内置表达式,无则认为是表达式;表达式可以是函数;120
if(aUsage[sUsage]!=null)121
{ 122
sReg = aUsage[sUsage];123
}124
else125
{126
try127
{128
if(eval(sUsage)==false)129
{ 130
me.pass = false;131
if(me.first==null)132
{133
me.first = els[i];134
}135

136
addMessage(getMessage(els[i])); 137

138
if(me.showAll==false)139
{140
setFocus(els[i]);141
break;142
}143
}144
}145
catch(e)146
{ 147
alert("表达式[" + sUsage +"]错误:" + e.description)148
return false;149
}150
}151
}152
else153
{ 154
sReg = els[i].getAttribute("Exp");155
}156

157
if(typeof(sReg)!="undefined"&&sReg!=null)158
{159
//对于失效状态不验证160
if(isDisabled(els[i])==true)161
{162
continue;163
}164

165
//取得表单的值,用通用取值函数166
var sVal = getValue(els[i]);167
//字符串->正则表达式,不区分大小写168
var reg = new RegExp(sReg,"i");169
if(!reg.test(sVal))170
{171
me.pass = false;172
if(me.first==null)173
{174
me.first = els[i];175
}176

177
//alert(reg);178
//验证不通过,弹出提示warning179
var sTip = getMessage(els[i]);180
if(sTip.length==0&&typeof(sUsage)!="undefined"&&sUsage!=null&&aMessage[sUsage]!=null)181
{182
sTip = aMessage[sUsage];183
}184
addMessage(sTip);185

186
if(me.showAll==false)187
{188
//该表单元素取得焦点,用通用返回函数189
setFocus(els[i]);190
break;191
}192

193
}194
} 195
}196

197
if(me.pass==false)198
{199
showMessage();200

201
if(me.first!=null&&me.showAll==true)202
{203
setFocus(me.first);204
}205
}206

207
return me.pass;208
}209

210
/*211
* 添加错误信息212
*/213
function addMessage(msg)214
{215
if(me.alert==true)216
{217
me.message += msg + "\n";218
}219
else220
{221
me.message += msg + "<br>";222
}223
}224

225
/*226
* 显示错误227
*/228
function getMessage(els)229
{230
var sTip = els.getAttribute("tip");231
if(typeof(sTip)!="undefined"&&sTip!=null)232
{233
return sTip;234
}235
else236
{237
return "";238
}239
}240

241

242
/*243
* 显示错误244
*/245
function showMessage()246
{247
//外接显示错误函数248
if(typeof(me.showMessageEx)=="function")249
{250
return me.showMessageEx(me.message);251
}252

253
if(me.alert==true)254
{255
alert(me.message);256
}257
else258
{259
var divTip;260
divTip = document.getElementById("divErrorMessage");261
try262
{263
if(typeof(divTip)=="undefined"||divTip==null)264
{265
divTip = document.createElement("div");266
divTip.id = "divErrorMessage";267
divTip.name = "divErrorMessage";268
divTip.style.color = "red";269
document.body.appendChild(divTip);270
}271

272
divTip.innerHTML = me.message;273
}catch(e){}274
}275
}276

277
/*278
* 获得元素是否失效(失效的元素不做判断)279
*/280
function isDisabled(el)281
{282
//对于radio,checkbox元素,只要其中有一个非失效元素就验证283
if(el.type=="radio"||el.type=="checkbox")284
{285
//取得第一个元素的name,搜索这个元素组286
var tmpels = document.getElementsByName(el.name);287
for(var i=0;i<tmpels.length;i++)288
{289
if(tmpels[i].disabled==false)290
{291
return false;292
}293
}294
return true;295
}296
else297
{298
return el.disabled;299
}300
}301

302

303
/*304
* 取得对象的值(对于单选多选框把其选择的个数作为需要验证的值)305
*/306
function getValue(el)307
{308
//取得表单元素的类型309
var sType = el.type;310
switch(sType)311
{312
//文本输入框,直接取值el.value313
case "text":314
case "hidden":315
case "password":316
case "file":317
case "textarea": return el.value;318
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个,"00"表示选中两个319
case "checkbox":320
case "radio": return getRadioValue(el);321
case "select-one":322
case "select-multiple": return getSelectValue(el);323
}324
//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数325
function getRadioValue(el)326
{327
var sValue = "";328
//取得第一个元素的name,搜索这个元素组329
var tmpels = document.getElementsByName(el.name);330
for(var i=0;i<tmpels.length;i++)331
{332
if(tmpels[i].checked)333
{334
sValue += "0";335
}336
}337
return sValue;338
}339
//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数340
function getSelectValue(el)341
{342
var sValue = "";343
for(var i=0;i<el.options.length;i++)344
{345
//单选下拉框提示选项设置为value=""346
if(el.options[i].selected && el.options[i].value!="")347
{348
sValue += "0";349
}350
}351
return sValue;352
}353
}354

355
/*356
* 对没有通过验证的元素设置焦点357
*/358
function setFocus(el)359
{360
//取得表单元素的类型361
var sType = el.type;362
switch(sType)363
{364
//文本输入框,光标定位在文本输入框的末尾365
case "text":366
case "hidden":367
case "password":368
case "file":369
case "textarea": 370
try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){};371
break;372
373
//单多选,第一选项非失效控件取得焦点374
case "checkbox":375
case "radio": 376
var els = document.getElementsByName(el.name);377
for(var i=0;i<els.length;i++)378
{379
if(els[i].disabled == false)380
{381
els[i].focus();382
break;383
}384
}385
break;386
case "select-one":387
case "select-multiple":388
el.focus();389
break;390
}391
}392

393
394
//自动绑定到所有form的onsubmit事件395
if(window.attachEvent)396
{397
window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms[i]; if(theFrom){theFrom.attachEvent("onsubmit",function(){return checkForm(theFrom);});}}});398
}399
else400
{401
window.onsubmit = function(e){var theFrom = e.target;if(theFrom){return checkForm(theFrom);}}402
}403

404
this.keyCheck = function()405
{406
if(window.attachEvent)407
{408
window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms[i]; if(theFrom){myKeyCheck(theFrom);}}});409
}410
else411
{412
//TOOD413
}414

415
function myKeyCheck(oForm)416
{417
var els = oForm.elements;418
//遍历所有表元素419
for(var i=0;i<els.length;i++)420
{421
//取得格式422
var sUsage = els[i].getAttribute("Usage"); 423
424
//如果设置Usage,则使用内置正则表达式,忽略Exp425
if(typeof(sUsage)!="undefined"&&sUsage!=null)426
{427
switch(sUsage.toLowerCase ())428
{429
case "zipcode":430
case "int":431
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}432
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}433
els[i].ondragenter = function(){return false;}434
els[i].style.imeMode= "disabled";435
break;436
case "mobile":437
case "int+":438
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false);}439
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}440
els[i].ondragenter = function(){return false;}441
els[i].style.imeMode= "disabled";442
break;443
case "int-":444
els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);} 445
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}446
els[i].ondragenter = function(){return false;}447
els[i].style.imeMode= "disabled";448
break;449
case "float":450
case "num":451
els[i].onkeypress = function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));} 452
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}453
els[i].ondragenter = function(){return false;}454
els[i].style.imeMode= "disabled";455
break;456
case "float+":457
case "num+":458
els[i].onkeypress = function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));} 459
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}460
els[i].ondragenter = function(){return false;}461
els[i].style.imeMode= "disabled";462
break;463
case "float-":464
case "num-":465
els[i].onkeypress = function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));} 466
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}467
els[i].ondragenter = function(){return false;}468
els[i].style.imeMode= "disabled";469
break;470
case "ascii":471
els[i].style.imeMode= "disabled";472
break;473
case "ip4":474
els[i].onkeypress = function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));} 475
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}476
els[i].ondragenter = function(){return false;}477
els[i].style.imeMode= "disabled";478
els[i].maxLength = 15;479
break;480
case "color":481
els[i].onkeypress = function(){return /[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')<0?String.fromCharCode(event.keyCode)=="#":false);} 482
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}483
els[i].ondragenter = function(){return false;}484
els[i].maxLength = 7;485
els[i].style.imeMode= "disabled";486
break;487
case "date":488
els[i].onkeypress = function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));} 489
els[i].onpaste = function(){return !clipboardData.getData('text').match(/\D/);}490
els[i].ondragenter = function(){return false;}491
els[i].style.imeMode= "disabled";492
break; 493
}494
}495
}496
}497
}498
}499

500
//初始化501
var g_check = new CLASS_CHECK();502
g_check.keyCheck();503

504

505




浙公网安备 33010602011771号