欢迎光临
我们一直在努力

用ASP动态生成JavaScript的表单验证代码

建站超值云服务器,限时71元/月

表单的验证是开发web应用程序中常遇到的一关。有时候我们必须保证表单的某些项必须填写、必须为数字、必须是指定的位数等等,这时候就要用到表单验证了,一般我们常用的表单验证有2种方式:

1、编写javascript或vbscript的表单验证函数,在客户端进行验证;

2、在表单提交后,使用asp的方法request.form获取表单的输入值进行判断,然后返回结果,这是在服务端进行验证;

  这2种方式都有其优缺点,比如第1种方式速度比较快,而且通常使用警告框的方式,用户能够很快的根据提示完成表单的填写,但是缺点就是用户的浏览器必须是支持javascript脚本的,再不然如果他关闭了javascript,那就!@#$%&^*(小田已经倒在地上了^_^);而第2种方式的兼容性比较好,但是缺点是速度比较慢(提交到服务端,在返回)而且使用也不方便。这次主要是用javascript的方法来验证,当然,如果同时用2种方式来验证是最保险了,不过(汗…………)要累死我们这些程序员了:)

  上面解释了表单验证的2中方式,下面就具体来讲讲动态生成javascript的概念。为什么要动态生成呢?因为这种客户端的验证代码是很烦琐的,如果每次都要自己编写真是累啊!用惯dw(dreamweaver)或ud的朋友可能通常使用表单验证的插件,使用后生成的代码也没有艺术感,而且很多是用不到的(代码冗余)。小田要讲的是,生成完全符合表单情况的代码。

声明:小田对javascript并不精通,这里只是想谈谈动态生成的方法,js的高手完全可以自己改。

  那么我们开始喽。

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

<script language=javascript>

<!–

//power by xiaotian 2002

function checksubmit()

{

if ((document.form1.name.value)==)

{

window.alert (姓名必须填写);

document.form1.name.select();

document.form1.name.focus();

return false;

}

else

return true;

}

//–>

</script>

<form name="form1" onsubmit="javascript:return checksubmit()">

<input type="text" name="name">

</form>

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

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

<%

response.write "<script language=javascript>"&vbcrlf&_

       "<!–"&vbcrlf&_

       "//power by xiaotian 2002"&vbcrlf&_

       "function checksubmit()"&vbcrlf&_

       "{"&vbcrlf&_

       "if ((document.form1.name.value)==)"&vbcrlf&_

       "{"&vbcrlf&_

       "window.alert (姓名必须填写);"&vbcrlf&_

       "document.form1.name.select();"&vbcrlf&_

       "document.form1.name.focus();"&vbcrlf&_

       "return false;"&vbcrlf&_

       "else"&vbcrlf&_

       "return true;"&vbcrlf&_

       "}"&vbcrlf&_

       "//–>"&vbcrlf&_

       "</script>"&vbcrlf&_

%>

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

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

function findjs(frmname,errstr)

dim tmparr

dim i

参数值

i=0

获取错误列表,建立数组

tmparr=split(errstr,"|")

输出查询条件

select case tmparr(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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

case "1" 必填的listmenu类型

findjs="if ((document."&frmname&"."&tmparr(i)&".value)=="""")"&vbcrlf&_

"{"&vbcrlf&_

"window.alert ("&tmparr(i+2)&");"&vbcrlf&_

"document."&frmname&"."&tmparr(i)&".focus();"&vbcrlf&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

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&_

"return false;"&vbcrlf&_

"}"&vbcrlf

"else"&vbcrlf&_

"return true;"&vbcrlf

exit function

end select

end function

其中参数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判断整合起来,代码如下:

sub checkform_js(frmname,errstr)

dim tmparr

dim i

dim strshow 输出js的字符串

获取错误列表,建立数组

tmparr=split(errstr,",")

写js

for i=0 to ubound(tmparr)

if i<>0 then

strshow=strshow&"else "&findjs(frmname,tmparr(i))

else

strshow=strshow&findjs(frmname,tmparr(i))

end if

next

输出

strshow="<script language=javascript>"&vbcrlf&_

"<!–"&vbcrlf&_

"//power by xiaotian 2002"&vbcrlf&_

"function checksubmit()"&vbcrlf&_

"{"&vbcrlf&_

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

"var pwdreg = /[a-z0-9]$/;"&vbcrlf&_

strshow&_

"else"&vbcrlf&_

"return true;"&vbcrlf&_

"}"&vbcrlf&_

"//–>"&vbcrlf&_

"</script>"

response.write strshow

end sub

大家注意到这里的一段:

if i<>0 then

strshow=strshow&"else "&findjs(frmname,tmparr(i))

else

strshow=strshow&findjs(frmname,tmparr(i))

end if

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

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

"var pwdreg = /[a-z0-9]$/;"&vbcrlf&_

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

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

<!–#include file="checkform_js.asp" –>

<%

call checkform_js("frm","name|0|姓名必须填写,number|2|编号必须是数字,number|3|编号指定为6位数|6,email|5|email的格式不正确")

%>

<form name="frm" onsubmit="javascript:return checksubmit()">

姓名:<input type="text" name="name">

编号:<input type="text" name="number">

email:<input type="text" name="email">

<input type="submit" name="submit" value="提交">

</form>

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

<%

dim errstr

errstr="name|0|姓名必须填写,"&_

   "number|2|编号必须是数字,number|3|编号指定为6位数|6,"&_

   "email|5|email的格式不正确"

call checkform_js("frm",errstr)

%>

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

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

<script language=javascript>

<!–

//power by xiaotian 2002

function checksubmit()

{

var emailreg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;

var pwdreg = /[_a-z0-9]$/;

if ((document.frm.name.value)=="")

{

window.alert (姓名必须填写);

document.frm.name.select();

document.frm.name.focus();

return false;

}

else if (isnan(document.frm.number.value))

{

window.alert (编号必须是数字);

document.frm.number.select();

document.frm.number.focus();

return false;

}

else if (document.frm.number.value.length=6)

{

window.alert (编号指定为6位数);

document.frm.number.select();

document.frm.number.focus();

return false;

}

else if ((!emailreg.test(document.frm.email.value))&&(document.frm.email.value!=))

{

window.alert (email的格式不正确);

document.frm.email.select();

document.frm.email.focus();

return false;

}

else

return true;

}

//–>

</script>

  熟悉js的朋友可以自己扩充这个函数,相信可以满足大家的验证要求了。

函数打包下载:http://www.10fber.com/mylesson/asp2js/checkform_js.zip

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用ASP动态生成JavaScript的表单验证代码
分享到: 更多 (0)

相关推荐

  • 暂无文章