表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。
Validator是基于JavaScript技术的伪静态类和对象的自定义属性,可以对网页中的表单项输入进行相应的验证,允许同一页面中同时验证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类,所以在调用时不需要实例化,直接以"类名+.语法+属性或方法名"来调用。此外,Validator还提供3种不同的错误提示模式,以满足不同的需要。
Validator目前可实现的验证类型有: [JavaScript] 版 Validator目前可实现的验证类型有: 1.是否为空; 2.中文字符; 3.双字节字符 4.英文; 5.数字; 6.整数; 7.实数; 8.Email地址; 9.使用HTTP协议的网址; 10.电话号码; 11.货币; 12.手机号码; 13.邮政编码; 14.身份证号码(1.05增强); 15.QQ号码; 16.日期; 17.符合安全规则的密码; 18.某项的重复值; 19.两数的关系比较; 20.判断输入值是否在(n, m)区间; 21.输入字符长度限制(可按字节比较); 22.对于具有相同名称的单选按钮的选中判断; 23.限制具有相同名称的多选按钮的选中数目; 24.自定义的正则表达式验证; 25.文件上传格式过滤(1.04) 运行环境(客户端): 在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0测试通过; 在Lunix RedHat 9下的Netscape测试通过;
对于客户端的表单验证,这个基于JavaScript编写的Validator基本上都可以满足,具体可以下载CHM文件:Validator.CHM下载
示例:代码如下: [Ctrl+A 全选 提示:你可先修改部分代码,再点运行代码]
更新历史:
1.01 修正对12月份的日期验证(感谢flylg999)
1.03 修正Range验证类型时将数字当字符串比较的bug(感谢cncom和xtlhnhbb) 修正日期验证(感谢Papsam) 增加Username验证类型 增加对Phone验证类型时支持分机号
1.04 增加文件格式的过滤,用于上传时限制上传的文件格式
1.05 增强对身份证号码的验证[ASP]版代码拷贝框
1
<
%
2
Class Validator
3
'
*************************************************
4
'
Validator for ASP beta 2 服务器端脚本
5
'
code by 我佛山人
6
'
[email protected]
7
'
http://www.cunite.com
8
'
*************************************************
9
Private
Re, Dic
10
Private
Separator
11
Private
ErrorItem, ErrorMessage, ErrorMode, ErrorNo
12
Private
FormName, FormIndex, FilePath, GetMethod
13
14
Private
Sub
Class_Initialize()
15
Set
Re
=
New
RegExp
16
Re.IgnoreCase
=
True
17
Re.Global
=
True
18
Set
Dic
=
CreateObject
(
"
Scripting.Dictionary
"
)
19
Separator
=
"
,"
20
ErrorItem
=
"
"
21
ErrorMessage
=
"
"
22
ErrorMode
=
5
23
ErrorNo
=
1
24
FilePath
=
Server.MapPath(Request.ServerVariables(
"
Script_Name
"
))
25
GetMethod
=
"
FSO"
26
End Sub
27
28
Private
Sub
Class_Terminate()
29
Set
Re
=
Nothing
30
Dic.RemoveAll()
31
Set
Dic
=
Nothing
32
End Sub
33
34
Public
Sub
Validate()
35
IF
Request(
"
Submit
"
)
=
""
Then
Exit
Sub
36
IF
Not
IsValidPost()
Then
Exit
Sub
37
38
With
Dic
39
.Add
"
Compare
"
,
"
Compare( PostValue, operator, toObj)"
40
.Add
"
Custom
"
,
"
Custom( PostValue,regexp )"
41
.Add
"
Date
"
,
"
IsDateFormat( PostValue,format )"
42
.Add
"
Limit
"
,
"
Limit( PostValue,min, max )"
43
.Add
"
LimitB
"
,
"
LimitB( PostValue,min, max )"
44
.Add
"
Range
"
,
"
Range( PostValue,min, max )"
45
.Add
"
Repeat
"
,
"
IsEqual( PostValue, Request(toObj) )"
46
.Add
"
Group
"
,
"
Group( PostValue,min, max )"
47
48
.Add
"
NotEqual
"
,
"
Op1 <> Op2"
49
.Add
"
GreaterThan
"
,
"
Op1 > Op2"
50
.Add
"
GreaterThanEqual
"
,
"
Op1 >= Op2"
51
.Add
"
LessThan
"
,
"
Op1 < Op2"
52
.Add
"
LessThanEqual
"
,
"
Op1 <= Op2"
53
.Add
"
Equal
"
,
"
Op1 = Op2"
54
End
With
55
56
Call
MatchCode()
57
58
IF
ErrorMessage
<>
""
Then
DisplayError
59
End Sub
60
61
Private
Sub
MatchCode()
62
Dim
bI, bG, bM
63
Dim
Str
64
65
Select
Case
GetMethod
66
Case
"
FSO
"
:
67
Dim
FSO :
Set
FSO
=
Server.
CreateObject
(
"
Scripting.FileSystemObject
"
)
68
Set
TS
=
FSO.OpenTextFile(FilePath,
1
,
false
)
69
Str
=
TS.ReadAll()
70
TS.Close
71
Set
TS
=
Nothing
72
Set
FSO
=
Nothing
73
Case
"
XMLHTTP
"
:
74
Dim
XHttp :
Set
XHttp
=
Server.
CreateObject
(
"
MSXML2.XMLHTTP
"
)
75
With
XHttp
76
Call
.Open(
"
Get
"
,
"
http://
"
&
Request.ServerVariables(
"
Server_Name
"
)
&
Request.ServerVariables(
"
Script_Name
"
),
False
)
77
Call
.Send()
78
Str
=
B2S(.responseBody)
79
End
With
80
Set
XHttp
=
Nothing
81
End
Select
82
Dim
itemString
83
With
Re
84
bI
=
.IgnoreCase
85
bG
=
.Global
86
bM
=
.MultiLine
87
.IgnoreCase
=
True
88
.Global
=
True
89
.Pattern
=
"
[\s\S]*<form [^>]+>([\s\S]+)<\/form>[\s\S]*"
90
Str
=
.
Replace
(Str,
"
$1
"
)
91
92
.Global
=
True
93
.MultiLine
=
True
94
.Pattern
=
"
<\/?(?!input|textarea|select)[^>]*>"
95
Str
=
.
Replace
(Str,
""
)
96
97
.Pattern
=
"
^.*(<(?=input|textarea|select)[^>]*>).*$"
98
Str
=
.
Replace
(Str,
"
$1
"
)
99
100
.Pattern
=
"
([\r\n]+|^\s*)(?=<)"
101
Str
=
.
Replace
(Str,
""
)
102
While
Test(
"
dataType=([""\'])([^""\'>]+)\1
"
, Str)
103
.MultiLine
=
False
104
.Pattern
=
"
^([^\n]+)\n([\s\S]*)$"
105
itemString
=
.
Replace
(Str,
"
$1
"
)
106
Str
=
.
Replace
(Str,
"
$2
"
)
107
.Pattern
=
"
(name|dataType|to1|min|max|msg|require|regexp|format)=([""\'])([^""\'>]+)\2"
108
109
Dim
Matches :
Set
Matches
=
.
Execute
(itemString)
110
Dim
Match, RetStr : RetStr
=
"
"
111
For
Each
Match in Matches
112
RetStr
=
RetStr
&
Match.Value
&
"
: "
113
Next
114
Call
IsValid(
Replace
(
Replace
(
Replace
(RetStr,
"
: $
"
,
""
),
"
to=
"
,
"
toObj=
"
),
"
""Require""
"
,
"
""NotEmpty""
"
))
115
Wend
116
.IgnoreCase
=
bI
117
.Global
=
bG
118
.MultiLine
=
bM
119
120
End
With
121
End Sub
122
123
Private
Sub
IsValid(ByVal Str)
124
Dim
name, msg, dataType, toObj, min, max, require, regexp, format
125
min
=
1
: max
=
100
: require
=
"
true
"
: format
=
"
YMD"
126
Execute
Str
127
Dim
PostValue : PostValue
=
Request(name)
128
Dim
Fun
129
130
IF
require
=
"
false
"
AND
PostValue
=
""
Then
Exit
Sub
131
132
IF
Dic.Exists(dataType)
Then
133
Fun
=
Dic.Item(dataType)
134
Else
Fun
=
"
Is
"
&
dataType
&
"
( PostValue )"
135
End
IF
136
137
IF
Not
Eval
(Fun)
Then
Call
AddError(name,msg)
138
End Sub
139
140
Private
Sub
DisplayError()
141
ErrorItem
=
Replace
(ErrorItem,
"
^(
"
&
Separator
&
"
)
"
,
""
)
142
ErrorMessage
=
Replace
(ErrorMessage,
"
^(
"
&
Separator
&
"
)
"
,
""
)
143
Select
Case
ErrorMode
144
Case
4
145
ErrorMessage
=
Join
(
Split
(ErrorMessage, Separator),
"
</li><li>
"
)
146
Response.Clear
147
Response.Write
"
<div style=""padding-left:100px;font:bold 12px Tahoma"">输入有错误:<br><ul><li>
"
&
Replace
(ErrorMessage,
"
\b\d+:
"
,
""
)
&
"
</li></ul>"
148
Response.Write
"
<br><a href='javascript:history.back()'>返回重填</a></div>"
149
Response.
End
150
Case
Else
151
Response.Write(
"
<script defer>dispError(""
"
&
ErrorItem
&
"
"", ""
"
&
ErrorMessage
&
"
"",
"
&
ErrorMode
&
"
, ""
"
&
Separator
&
"
"")</script>
"
)
152
End
Select
153
End Sub
154
155
Public
Function
IsEmail(ByVal Str)
156
IsEmail
=
Test(
"
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
"
, Str)
157
End Function
158
159
Public
Function
IsUrl(ByVal Str)
160
IsUrl
=
Test(
"
^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>""])*$
"
, Str)
161
End Function
162
163
Public
Function
IsNum(ByVal Str)
164
IsNum
=
Test(
"
^\d+$
"
, Str)
165
End Function
166
167
Public
Function
IsQQ(ByVal Str)
168
IsQQ
=
Test(
"
^[1-9]\d{4,8}$
"
, Str)
169
End Function
170
171
Public
Function
IsZip(ByVal Str)
172
IsZip
=
Test(
"
^[1-9]\d{5}$
"
, Str)
173
End Function
174
175
Public
Function
IsIdCard(ByVal Str)
176
IsIdCard
=
Test(
"
^\d{15}(\d{2}[A-Za-z0-9])?$
"
, Str)
177
End Function
178
179
Public
Function
IsChinese(ByVal Str)
180
IsChinese
=
Test(
"
^[\u0391-\uFFE5]+$
"
, Str)
181
End Function
182
183
Public
Function
IsEnglish(ByVal Str)
184
IsEnglish
=
Test(
"
^[A-Za-z]+$
"
, Str)
185
End Function
186
187
Public
Function
IsMobile(ByVal Str)
188
IsMobile
=
Test(
"
^((\(\d{3}\))|(\d{3}\-))?13\d{9}$
"
, Str)
189
End Function
190
191
Public
Function
IsPhone(ByVal Str)
192
IsPhone
=
Test(
"
^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$
"
, Str)
193
End Function
194
195
Public
Function
IsSafe(ByVal Str)
196
IsSafe
=
(Test(
"
^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\""]*)|.{0,5})$|\s
"
, Str)
=
False
)
197
End Function
198
199
Public
Function
IsNotEmpty(ByVal Str)
200
IsNotEmpty
=
LenB(Str)
>
0
201
End Function
202
203
Public
Function
IsDateFormat(ByVal Str, ByVal Format)
204
IF
Not
IsDate
(Str)
Then
205
IsDateFormat
=
False
206
Exit
Function
207
End
IF
208
209
IF
Format
=
"
YMD
"
Then
210
IsDateFormat
=
Test(
"
^((\d{4})|(\d{2}))([-./])(\d{1,2})\4(\d{1,2})$
"
, Str)
211
Else
212
IsDateFormat
=
Test(
"
^(\d{1,2})([-./])(\d{1,2})\\2((\d{4})|(\d{2}))$
"
, Str)
213
End
IF
214
End Function
215
216
Public
Function
IsEqual(ByVal Src, ByVal Tar)
217
IsEqual
=
(Src
=
Tar)
218
End Function
219
220
Public
Function
Compare(ByVal Op1, ByVal Operator, ByVal Op2)
221
Compare
=
False
222
IF
Dic.Exists(Operator)
Then
223
Compare
=
Eval
(Dic.Item(Operator))
224
Elseif
IsNotEmpty(Op1)
Then
225
Compare
=
Eval
(Op1
&
Operator
&
Op2 )
226
End
IF
227
End Function
228
229
Public
Function
Range(ByVal Src, ByVal Min, ByVal Max)
230
Min
=
CInt
(Min) : Max
=
CInt
(Max)
231
Range
=
(Min
<
Src
And
Src
<
Max)
232
End Function
233
234
Public
Function
Group(ByVal Src, ByVal Min, ByVal Max)
235
Min
=
CInt
(Min) : Max
=
CInt
(Max)
236
Dim
Num : Num
=
UBound
(
Split
(Src,
"
,
"
))
+
1
237
Group
=
Range(Num, Min
-
1
, Max
+
1
)
238
End Function
239
240
Public
Function
Custom(ByVal Str, ByVal Reg)
241
Custom
=
Test(Reg, Str)
242
End Function
243
244
Public
Function
Limit(ByVal Str, ByVal Min, ByVal Max)
245
Min
=
CInt
(Min) : Max
=
CInt
(Max)
246
Dim
L : L
=
Len
(Str)
247
Limit
=
(Min
<=
L
And
L
<=
Max)
248
End Function
249
250
Public
Function
LimitB(ByVal Str, ByVal Min, ByVal Max)
251
Min
=
CInt
(Min) : Max
=
CInt
(Max)
252
Dim
L : L
=
bLen(Str)
253
LimitB
=
(Min
<=
L
And
L
<=
Max)
254
End Function
255
256
Private
Function
Test(ByVal Pattern, ByVal Str)
257
Re.Pattern
=
Pattern
258
Test
=
Re.Test(Str)
259
End Function
260
261
Public
Function
bLen(ByVal Str)
262
bLen
=
Len
(
Replace
(Str,
"
[^\x00-\xFF]
"
,
"
..
"
))
263
End Function
264
265
Private
Function
Replace
(ByVal Str, ByVal Pattern, ByVal ReStr)
266
Re.Pattern
=
Pattern
267
Replace
=
Re.
Replace
(Str, ReStr)
268
End Function
269
270
Private
Function
B2S(ByVal iStr)
271
Dim
reVal : reVal
=
"
"
272
Dim
i, Code, nCode
273
For
i
=
1
to
LenB(iStr)
274
Code
=
AscB(MidB(iStr, i,
1
))
275
IF
Code
<
&
h80
Then
276
reVal
=
reVal
&
Chr
(Code)
277
Else
278
nCode
=
AscB(MidB(iStr, i
+
1
,
1
))
279
reVal
=
reVal
&
Chr
(
CLng
(Code)
*
&
h100
+
CInt
(nCode))
280
i
=
i
+
1
281
End
IF
282
Next
283
B2S
=
reVal
284
End Function
285
286
Private
Sub
AddError(ByVal Name, ByVal Message)
287
ErrorItem
=
ErrorItem
&
Separator
&
Name
288
ErrorMessage
=
ErrorMessage
&
Separator
&
ErrorNo
&
"
:
"
&
Message
289
ErrorNo
=
ErrorNo
+
1
290
End Sub
291
292
Public
Function
IsValidPost()
293
Dim
Url1 : Url1
=
Cstr
(Request.ServerVariables(
"
HTTP_REFERER
"
))
294
Dim
Url2 : Url2
=
Cstr
(Request.ServerVariables(
"
SERVER_NAME
"
))
295
IsValidPost
=
(
Mid
(Url1,
8
,
Len
(Url2))
=
Url2)
296
End Function
297
298
Public
Property
Let
Mode(ByVal Val)
299
ErrorMode
=
CInt
(Val)
300
End Property
301
302
Public
Property
Let
Form(ByVal Val)
303
IF
IsNumeric
(Val)
Then
304
FormIndex
=
Val
305
Else
306
FormName
=
Val
307
End
IF
308
End Property
309
310
Public
Property
Let
Path(ByVal Val)
311
IF
Test(
"
^[A-Za-z]:\\\w+$
"
, Val)
Then
312
FilePath
=
Val
313
Else
314
FilePath
=
Server.MapPath(Val)
315
End
IF
316
End Property
317
318
Public
Property
Let
Method(ByVal Val)
319
GetMethod
=
Val
320
End Property
321
End
Class
322
%
>
323
<
title
>
表单验证类 Validator v1.
0
</
title
>
324
<
meta http
-
equiv
=
"
Content-Type
"
content
=
"
text/html; charset=gb2312
"
>
325
<
style
>
326
body,td{font:normal 12px Verdana;color:#
333333
}
327
input,textarea,
select
,td{font:normal 12px Verdana;color:#
333333
;border:1px solid #
999999
;background:#ffffff}
328
table{border
-
collapse:collapse;}
329
td{padding:3px}
330
input{height:
20
;}
331
textarea{width:
80
%;height:50px;overfmin:auto;}
332
form{display:inline}
333
</
style
>
334
<
script
>
335
/*************************************************
336
Validator
for
ASP beta
2
客户端脚本
337
code by 我佛山人
338
[email protected]
339
http:
//
www.cunite.com
340
*************************************************/
341
function
dispError(items, messages, mode, separator){
342
var iArray
=
items.
split
(separator);
343
for
(var i
=
iArray.length
-
1
;i
>=
0
;i
--
)
344
iArray[i]
=
getObj(iArray[i]);
345
messages
=
(
"
以下原因导致提交失败:\t\t\t\t
"
+
separator
+
messages).
split
(separator);
346
switch(mode){
347
case
2
:
348
for
(i
=
iArray.length
-
1
;i
>=
0
;i
--
)
349
iArray[i].style.color
=
"
red
"
;
350
case
1
:
351
alert(messages.
join
(
"
\n
"
));
352
iArray[
0
].focus();
353
break;
354
case
3
:
355
for
(i
=
iArray.length
-
1
;i
>=
0
;i
--
){
356
try{
357
var span
=
document.createElement(
"
SPAN
"
);
358
span.id
=
"
__ErrorMessagePanel
"
;
359
span.style.color
=
"
red
"
;
360
iArray[i].parentNode.appendChild(span);
361
span.innerHTML
=
messages[i
+
1
].
replace
(
/\
d
+
:
/
,
"
*
"
);
362
}
363
catch(e){alert(e.description);}
364
}
365
iArray[
0
].focus();
366
break;
367
}
368
}
369
370
function
getObj(name){
371
var objs
=
document.getElementsByName(name);
372
return objs[objs.length
-
1
];
373
}
374
</
script
>
375
<
form name
=
"
theForm
"
id
=
"
demo
"
action
=
""
method
=
"
post
"
onSubmit
=
"
return true
"
>
376
<
table align
=
"
center
"
>
377
<
tr
>
378
<
td
>
真实姓名:
</
td
><
td
><
input name
=
"
Name
"
dataType
=
"
Chinese
"
msg
=
"
真实姓名只允许中文
"
></
td
>
379
</
tr
>
380
<
tr
>
381
<
td
>
英文名:
</
td
><
td
><
input name
=
"
Nick
"
dataType
=
"
English
"
require
=
"
false
"
msg
=
"
英文名只允许英文字母
"
></
td
>
382
</
tr
>
383
<
tr
>
384
<
td
>
主页:
</
td
><
td
><
input name
=
"
Homepage
"
require
=
"
false
"
dataType
=
"
Url
"
msg
=
"
非法的Url
"
></
td
>
385
</
tr
>
386
<
tr
>
387
<
td
>
密码:
</
td
><
td
><
input name
=
"
Password
"
dataType
=
"
Safe
"
msg
=
"
密码不符合安全规则
"
type
=
"
password
"
></
td
>
388
</
tr
>
389
<
tr
>
390
<
td
>
重复:
</
td
><
td
><
input name
=
"
Repeat
"
dataType
=
"
Repeat
"
to
=
"
Password
"
msg
=
"
两次输入的密码不一致
"
type
=
"
password
"
></
td
>
391
</
tr
>
392
<
tr
>
393
<
td
>
信箱:
</
td
><
td
><
input name
=
"
Email
"
dataType
=
"
Email
"
msg
=
"
信箱格式不正确
"
></
td
>
394
</
tr
>
395
<
tr
>
396
<
td
>
信箱:
</
td
><
td
><
input name
=
"
Email1
"
dataType
=
"
Repeat
"
to
=
"
Email
"
msg
=
"
两次输入的信箱不一致
"
></
td
>
397
</
tr
>
398
<
tr
>
399
<
td
>
QQ:
</
td
><
td
><
input name
=
"
QQ
"
require
=
"
false
"
dataType
=
"
QQ
"
msg
=
"
QQ号码不存在
"
></
td
>
400
</
tr
>
401
<
tr
>
402
<
td
>
身份证:
</
td
><
td
><
input name
=
"
Card
"
dataType
=
"
IdCard
"
msg
=
"
身份证号码不正确
"
></
td
>
403
</
tr
>
404
<
tr
>
405
<
td
>
年龄:
</
td
><
td
><
input name
=
"
Year
"
dataType
=
"
Range
"
msg
=
"
年龄必须在18~28之间
"
min
=
"
18
"
max
=
"
28
"
></
td
>
406
</
tr
>
407
<
tr
>
408
<
td
>
年龄1:
</
td
><
td
><
input name
=
"
Year1
"
require
=
"
false
"
dataType
=
"
Compare
"
msg
=
"
年龄必须在18以上
"
to1
=
"
18
"
operator
=
"
GreaterThanEqual
"
></
td
>
409
</
tr
>
410
<
tr
>
411
<
td
>
电话:
</
td
><
td
><
input name
=
"
Phone
"
require
=
"
false
"
dataType
=
"
Phone
"
msg
=
"
电话号码不正确
"
></
td
>
412
</
tr
>
413
<
tr
>
414
<
td
>
手机:
</
td
><
td
><
input name
=
"
Mobile
"
require
=
"
false
"
dataType
=
"
Mobile
"
msg
=
"
手机号码不正确
"
></
td
>
415
</
tr
>
416
<
tr
>
417
<
td
>
生日:
</
td
><
td
><
input name
=
"
Birthday
"
dataType
=
"
Date
"
format
=
"
YMD
"
msg
=
"
生日日期不存在
"
></
td
>
418
</
tr
>
419
<
tr
>
420
<
td
>
邮政编码:
</
td
><
td
><
input name
=
"
Zip
"
dataType
=
"
Custom
"
regexp
=
"
^[1-9]\d{5}$
"
msg
=
"
邮政编码不存在
"
></
td
>
421
</
tr
>
422
<
tr
>
423
<
td
>
邮政编码:
</
td
><
td
><
input name
=
"
Zip1
"
dataType
=
"
Zip
"
msg
=
"
邮政编码不存在
"
></
td
>
424
</
tr
>
425
<
tr
>
426
<
td
>
操作系统:
</
td
><
td
><
select
name
=
"
OS
"
dataType
=
"
Require
"
msg
=
"
未选择所用操作系统
"
><
option
value
=
""
>
选择您所用的操作系统
</
option
><
option
value
=
"
Win98
"
>
Win98
</
option
><
option
value
=
"
Win2k
"
>
Win2k
</
option
><
option
value
=
"
WinXP
"
>
WinXP
</
option
></
select
></
td
>
427
</
tr
>
428
<
tr
>
429
<
td
>
所在省份:
</
td
><
td
>
广东
<
input name
=
"
Province
"
value
=
"
1
"
type
=
"
radio
"
>
陕西
<
input name
=
"
Province
"
value
=
"
2
"
type
=
"
radio
"
>
浙江
<
input name
=
"
Province
"
value
=
"
3
"
type
=
"
radio
"
>
江西
<
input name
=
"
Province
"
value
=
"
4
"
type
=
"
radio
"
dataType
=
"
Group
"
msg
=
"
必须选定一个省份
"
></
td
>
430
</
tr
>
431
<
tr
>
432
<
td
>
爱好:
</
td
><
td
>
运动
<
input name
=
"
Favorite
"
value
=
"
1
"
type
=
"
checkbox
"
>
上网
<
input name
=
"
Favorite
"
value
=
"
2
"
type
=
"
checkbox
"
>
听音乐
<
input name
=
"
Favorite
"
value
=
"
3
"
type
=
"
checkbox
"
>
看书
<
input name
=
"
Favorite
"
value
=
"
4
"
type
=
"
checkbox
"
dataType
=
"
Group
"
min
=
"
2
"
max
=
"
3
"
msg
=
"
必须选择2~3种爱好
"
></
td
>
433
</
tr
>
434
<
tr
>
435
<
td
>
自我介绍:
</
td
><
td
><
textarea name
=
"
Description
"
dataType
=
"
Limit
"
max
=
"
10
"
msg
=
"
自我介绍内容必须在10个字之内
"
>
中文是一个字
</
textarea
></
td
>
436
</
tr
>
437
<
tr
>
438
<
td
>
自传:
</
td
><
td
><
textarea name
=
"
History
"
dataType
=
"
LimitB
"
min
=
"
3
"
max
=
"
10
"
msg
=
"
自传内容必须在[3~10]个字节之内
"
>
中文是两个字节t
</
textarea
></
td
>
439
</
tr
>
440
<
tr
>
441
<
td colspan
=
"
2
"
><
input name
=
"
Submit
"
type
=
"
submit
"
value
=
"
确定提交
"
></
td
>
442
</
tr
>
443
</
table
>
444
</
form
>
445
<
%
446
Dim
V :
Set
V
=
New
Validator
447
V.Mode
=
3
448
V.Method
=
"
XMLHTTP"
449
V.Validate()
450
Set
V
=
Nothing
451
%
>
452
</
body
>
453
</
html
>