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) |