Chinaunix首页 | 论坛 | 博客
  • 博客访问: 956345
  • 博文数量: 102
  • 博客积分: 10033
  • 博客等级: 上将
  • 技术积分: 1385
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-20 15:26
文章分类

全部博文(102)

文章存档

2014年(3)

2013年(1)

2011年(1)

2010年(3)

2009年(7)

2008年(3)

2007年(26)

2006年(58)

我的朋友

分类:

2006-05-23 00:57:27

1、我们先来看看一段简单的javascript的验证代码:









这段代码是验证表单form1的name表单项,必须填写内容。这里就有几个关键的部分:表单域名称、表单项名称、判断语句;这些就是我们下面编写ASP函数的关键了。

2、如何生成javascript代码。最简单的,就是用Response.Write输出了,比如把上面代码输出就可以是:

<%
Response.Write""&vbCrlf&_
       ""&vbCrlf&_
       ""&vbCrlf&_
%>

这里的vbCrlf是一个回车换行,&是连接符,&_是代码换行连接的字符。

3、这段代码的头和尾是基本固定不变的,变化的是中间的if判断部分,我们可以先把这部分写成函数,小田已经写好一个了,大家可以参考一下,下面是代码:

FunctionfindJS(frmName,errStr)
DimtmpArr
Dimi
'参数值
i=0
'获取错误列表,建立数组
tmpArr=Split(errStr,"")
'输出查询条件
SelectCasetmpArr(i+1)
Case"0"'必填的Text类型
findJS="if((document."&frmName&"."&tmpArr(i)&".value)=="""")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"1"'必填的ListMenu类型
findJS="if((document."&frmName&"."&tmpArr(i)&".value)=="""")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"2"'必须为数字的Text类型
findJS="if(isNaN(document."&frmName&"."&tmpArr(i)&".value))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"3"'必须为指定位数的Text类型
findJS="if(document."&frmName&"."&tmpArr(i)&".value.length="&tmpArr(i+3)&")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"4"'必须大于指定位数的Text类型
findJS="if(document."&frmName&"."&tmpArr(i)&".value.length<"&tmpArr(i+3)&")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"5"'必须为Email的Text类型
findJS="if((!emailReg.test(document."&frmName&"."&tmpArr(i)&".value))&&(document."&frmName&"."&tmpArr(i)&".value!=''))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"6"'必须为a-z或0-9的字符的Text类型
findJS="if((!pwdReg.test(document."&frmName&"."&tmpArr(i)&".value))&&(document."&frmName&"."&tmpArr(i)&".value!=''))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"7"'确认密码和密码必须相等的Text类型
findJS="if((document."&frmName&"."&tmpArr(i)&".value)!=(document."&frmName&"."&tmpArr(i+3)&".value))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
EndSelect
EndFunction


其中参数frmName是指表单域的名称,而errStr是表单项+判断类型+出错提示的一个数组,其语法为:

"表单项名称1判断类型1出错提示1[可选参数1],表单项名称2判断类型2出错提示2[可选参数2],..."
表单项名称:例如name等,是自定义的
判断类型:就是Case语句里的0,1,2,3等等
出错提示:例如姓名必须填写等,是自定义的
可选参数:比如在判断确认密码和密码必须相等的Text类型时,可选参数就是想要判断相当的密码表单项名称;在必须为指定位数的Text类型时,可选参数就是指定的位数。当然可以选参数可以是好几个,具体就看你Case语句里的if是怎么编的了。

这里已经罗列了8种不同的情况的if判断语句,大家可以继续添加上去,注意这里的几个特别的部分,比如序号5email格式的判断(emailReg.test),这里用到了正则表达式,而正则表达式的定义,我们可以统一放在if判断的外面。

4、函数CheckForm_JS(frmName,errStr)。这个函数的作用是最后将一个个javascript的if判断整合起来,代码如下:

SubCheckForm_JS(frmName,errStr)
DimtmpArr
Dimi
DimstrShow'输出JS的字符串
'获取错误列表,建立数组
tmpArr=Split(errStr,",")
'写JS
fori=0toUBound(tmpArr)
ifi<>0then
strShow=strShow&"else"&findJS(frmName,tmpArr(i))
else
strShow=strShow&findJS(frmName,tmpArr(i))
endif
next
'输出
strShow=""&vbCrlf&_
""&vbCrlf&_
""
Response.WritestrShow
EndSub

大家注意到这里的一段:

ifi<>0then
strShow=strShow&"else"&findJS(frmName,tmpArr(i))
else
strShow=strShow&findJS(frmName,tmpArr(i))
endif

作用是把第1个以后javascript的if语句写成elseif,而

"varemailReg=/^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;"&vbCrlf&_
"varpwdReg=/[a-z0-9]$/;"&vbCrlf&_

段代码就是正则表达式的定义了,大家可以根据需要扩充。

5、使用方法。我们可以把这2段函数写在一个文件里,比如CheckForm_JS.asp,然后在要使用的页调用,比如:


<%
Callcheckform_js("frm","name0姓名必须填写,number2编号必须是数字,number3编号指定为6位数6,email5email的格式不正确")
%>


姓名:
编号:
email:



在实际的使用中,errStr可能会是很长的字符串,书写中我们可以用一断行的方法写,比如上面的errStr我们可以这样写:

<%
DimerrStr
errStr="name0姓名必须填写,"&_
   "number2编号必须是数字,number3编号指定为6位数6,"&_
   "email5email的格式不正确"
Callcheckform_js("frm",errStr)
%>

注意:由于函数中数组的分隔符是""和",",所以,errStr中的错误提示不能使用这2个字符,大家可以用全角的来代替。

6、代码运行情况。以上代码运行后,就可以得到下面的javascript:



阅读(2029) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~