Tue, 16 May 2006. 找找吧
吧台 读吧 链接 留言 设计沙龙 BT Men
找找吧
 
Photoshop . Flash . Asp . Dreamweaver . Css . Html . JavaScript . Xml . Flash AS . WEB标准 . Illustrator . Sql . WEB配色 . Access . ASP.NET 2.0 . VBScript . Xslt . Rss . Swift3D . IIS . Wap . WEB2.0 . .Net . Flsh AS .
‹ 网站设计制作开发漫谈(PS/DW) 编程开发 编程开发 关键字排名查询工具-FLASH制作 ›
Nowgoo写的服务器端验证提交表单内容的类
water 整理于 :42 来自: $Nowgoo->Blog(); 晴天 作者: Nowgoo    Large Medium Small

点击下载此文件

  1. ASP Validator 简介
  2. 使用 ASP Validator
  3. 使用 ASP Validator 处理上传类表单
  4. 程序员参考
  5. 常见问题与解答
  6. 关于 ASP Validator

1、ASP Validator 简介 [ 顶端 ]

ASP Validator 是基于 ASP 的一个验证类,用于服务器端验证。比如,验证表单中一个文本框(假设元素名为 UserEmail)的值是否为正确的电子邮件格式,按传统的方法您可能会编写这样的代码:

程序代码:[ 复制代码到剪贴板 ]

Dim strEmail, objRegExp
strEmail = Trim(Request.Form("UserEmail")
Set objRegExp = New RegExp
With objRegExp
  .Global     = False
  .IgnoreCase = True
  .Pattern    = "^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"
End With
If objRegExp.Test(strEmail) = False Then
  Response.Write("非法的电子邮件格式")
  Set objRegExp = Nothing
End If

而使用 ASP Validator 时您可能会编写如下代码:

程序代码:[ 复制代码到剪贴板 ]

Dim objValidator
Set objValidator = New Validator
objValidator.Add "UserEmail", "Email", "非法的电子邮件格式", ""
If Not objValidator.Validate Then
  Response.Write(objValidator.Err)
  Set objValidator = Nothing
End If

上例中,虽然传统方法更显得直观,而且代码行数也没多多少,但是在实际应用中,经常会碰到对多个表单元素进行多种规则验证的情况,这时您不得不为每一个元素的每一种验证规则编写代码,虽然可以通过将常用函数写进包含文件的方式来减轻劳动强度,但仍需要花费大量的时间和精力来编写重复的代码片断(起码您需要写无数个 Request.Form("")、If Then 、……)。这时,使用 ASP Validator 的优越性便体现出来了。

上例中,我们使用了 ASP Validator 的 Add 方法、Validate 方法和 Err 属性。使用 ASP Validator 时,我们先通过 Add 方法添加需要验证的规则,然后通过 Validate 方法执行验证并得到验证结果,最后通过 Err 属性得到出错信息(如果有的话)。在 ASP Validator 中,我们把整个验证任务分解成若干条“规则”,通过 Add 方法来添加规则。Add 方法的函数原型如下:

程序代码:[ 复制代码到剪贴板 ]
Public Sub Add(Element, RegType, ErrMsg, Para)
Add 方法包含四个参数:表单元素名、规则类型、出错信息、规则参数。在上例中,表单元素名为 "UserEmail",规则类型为 "Email",出错信息为 "非法的电子邮件格式",规则参数为空。

在 ASP Validator 中,我们将规则类型分为两种:正则类和非正则类。对于正则类规则,我们只需给出规则类型(比如 Email 规则),不需需要规则参数。而对于非正则类规则(如 Length 规则),我们可能还需给出规则参数,比如验证一个表单元素(假设为 UserName)值的长度是否在 6 到 12 字节之间(一个数字或字母算一个字节,一个汉字算两个),您需要编写如下代码:

程序代码:[ 复制代码到剪贴板 ]

objValidator.Add "UserName", "Length", "用户名长度必须在 6 到 12 字节之间", "6,12"

上例中,我们为 Length 规则指定了规则参数 "6,12",它指示了 Length 规则的最小长度和最大长度。对于非正则类规则,您需要查阅 程序员参考 来获悉每一种规则的参数格式。比如,Length 规则的参数格式为 "n,m",n 和 m 分别代表最小长度和最大长度,如果省略则代表不限(即 ",6" 代表最长为 6 个字节,"4," 代表最小 4 个字节)。

现在 ASP Validator 支持如下规则类型:

规则类型验证功能备注
BadWords 脏字检测 非正则类型
CheckIP 检验IP是否在允许范围内 非正则类型
Chinese 中文 正则类型
Currency 货币格式 正则类型
Custom 自定义正则表达式 非正则类型
Double 实数 正则类型
English 英文 正则类型
Equal 等于某个值 非正则类型
Integer 整数 正则类型
Length 字符串长度 非正则类型
Number 数字 正则类型
Phone 电话号码格式 正则类型
QQ QQ号码 正则类型
Related 是否同时有值/无值 非正则类型
Require 必填项 正则类型
URL 基于HTTP协议的网址格式 正则类型
Zip 邮政编码 正则类型

2、使用 ASP Validator [ 顶端 ]

例1:一个用户注册表单实例

程序代码:[ 复制代码到剪贴板 ]

'-----------------------------------------------Register.asp
<!--#include file="validate.cls.asp"-->
<%
Dim objValidator
Set objValidator = New Validator
With objValidator
  .Add "UserName", "English", "用户名必须由纯英文字母组成", ""
  .Add "UserName", "Length", "用户名长度必须在 6 到 12 位之间", "6,12"
  .Add "UserPwd", "Length", "密码至少要 6 位", "6,"
  .Add "UserPwdRetype", "Equal", "您两次输入的密码不一致", "{UserPwd}"
  .Add "UserEmail", "Email", "您输入的电子邮件格式不对", ""
End With

If Not objValidator.Validate Then
  Response.Write(objValidator.Err)
  Set objValidator = Nothing
  Response.End
Else
  Response.Write("验证通过")
  Set objValidator = Nothing
  Response.End
End If
%>

'-----------------------------------------------Form.htm
<html>
<head>
<title>一个用户注册表单实例</title>
</head>

<body>
<form name="frmUserReg" action="Register.asp" method="post">
用户名:<input type="text" name="UserName"><br>
密码:<input type="password" name="UserPwd"><br>
密码再输一次:<input type="password" name="UserPwdRetype"><br>
电子邮件:<input type="text" name="UserEmail"><br>
<input type="submit" value="注册">
</form>
</body>
</html>

例1 中我们使用了带 {} 标记的 Equal 规则,它表示与表单中某一元素的值相等,具体信息请参考 Equal 规则用法。Equal 规则还有更高级的用法:

例2:一个用户登录表单实例

程序代码:[ 复制代码到剪贴板 ]

'-----------------------------------------------CheckLogin.asp
<!--#include file="validate.cls.asp"-->
<!--#include file="md5.asp"-->
<%
'打开数据库连接
Dim objConn
Set objConn = Server.CreateObject("ADODB.connection")
objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=..."
objConn.Open

Dim objValidator
Set objValidator = New Validator
With objValidator
  Set .Conn = objConn
  .Add "UserName", "English", "用户名必须由纯英文字母组成", ""
  .AddElement "UserPwdMd5", md5(trim(request.form("Password")))
  .Add "UserPwdMd5", "Equal", "用户名与密码不符", "SQL:SELECT Password FROM [Users] WHERE UserName='{UserName}'"
  .Add "Check", "Equal", "您输入的验证码不对", CStr(Session("CheckCode"))
End With

If Not objValidator.Validate Then
  Response.Write(objValidator.Err)
  Set objValidator = Nothing
  Response.End
Else
  Response.Write("验证通过")
  Set objValidator = Nothing
  Response.End
End If
%>

'-----------------------------------------------Form.htm
<html>
<head>
<title>一个用户登录表单实例</title>
</head>

<body>
<form name="frmUserLogin" action="CheckLogin.asp" method="post">
用户名:<input type="text" name="UserName"><br>
密码:<input type="password" name="UserPwd"><br>
验证码:<input type="text" name="ChechCode"><img src="checkcode.asp"><br>
<input type="submit" value="登录">
</form>
</body>
</html>

例2 中,我们使用了以 "SQL:" 引导的 Equal 规则参数,它表示与某一记录集(单列)作比较,如果在记录中能找到相等的值,则认为符合规则。此外,我们还使用了 AddElement 方法,它的作用是往 ASP Validator 中添加一个“虚拟”的元素,因为需要将用户提交的密码进行 Md5 加密,而 ASP Validator 并没有集成 Md5() 函数。当然,您也可以这么写:

程序代码:[ 复制代码到剪贴板 ]

.Update "Password", md5(trim(request.form("Password")))
.Add "Password", "Equal", "用户名与密码不符", "SQL:SELECT Password FROM [Users] WHERE UserName='{UserName}'"

Update 方法用来更新某一元素的值,详情请参考 Update 方法。

3、使用 ASP Validator 处理上传类表单 [ 顶端 ]

与自带的无组件上传类(修改自无惧上传类)配合,ASP Validator 能够处理上传表单(表单 enctype 属性为 multipart/form-data)。

例3:处理上传类表单

程序代码:[ 复制代码到剪贴板 ]

<!--#include file="validate.cls.asp"-->
<!--#include file="upfile.cls.asp"-->
<%
Dim objValidator, objFileUp

'构造一个文件上传对象,并设置其属性
Set objFileUp = New UpLoader
objFileUp.MaxSize = 102400 '最大上传尺寸,单位:字节
objFileUp.AllowExt = "rar;jpg;txt" '允许上传的文件类型,用半角分号隔开,如果您想限制成不允许某类文件,还可设置 DisAllowExt 属性,参考后面的说明

'告诉 ASP Validator 这是一个上传类表单,类文件中已经包含此变量的定义,只须保证这句代码放在验证对象实例化之前
blnUploadForm = True
'实例化验证对象
Set objValidator = New Validator
with objValidator
  '给验证对象指定一个文件上传对象,ASP Validator 会自动从这个对象中读取表单元素值,并自动获取出错信息
  Set .FileUp = objFileUp
  '这里可以增加表单中其它元素的验证规则,同前例
end with

If Not objValidator.Validate Then
  Response.Write(objValidator.Err)
else
  '保存文件
  objFileUp.SaveFile "file1", Server.MapPath("/validator")&"", False
  '此时可对上传文件时发生的错误进一步处理
  If objFileUp.Err > 0 Then
    Response.Write objFileUp.ErrMsg
  Else
    Response.write "OK"
  End If
End If
Set objFileUp = Nothing
Set objValidator = Nothing
%>

说明

  1. 要处理上传类表单,表单 enctype 属性必须为 multipart/form-data
  2. 必须在验证对象实例化之前加上 blnUploadForm = True,它告诉 ASP Validator 这是一个上传类表单。因为上传类表单中的元素值不能直接读取,而且 Request 对象不能判断表单类型,如果您有更好的解决方案,请告诉我。注:validator.cls.asp 文件中已经包含此变量的定义。
  3. 文件上传类的属性:
    MaxSize 最大上传尺寸,单位:字节。可读可写。不设置表示无限制。
    Err 出错代码,只读。-1=无错; 1=没有文件上传; 2=上传尺寸超出限制; 3=扩展名非法; 4=保存的路径非法;
    ErrMsg 出错信息,只读。
    AllowExt 与 DisAllowExt 上传文件扩展名的白名单与黑名单,以半角分号分隔,白名单优先。
  4. 上传文件类的方法:
    SaveFile 保存文件。
    第一个参数表示表单中对应的元素名
    第二个参数表示要保存的路径。除非保存成指定文件,一定要保证此参数最后一个字符为。Server.MapPath("/upload")&" est.txt" 合法,Server.MapPath("/upload") 非法,Server.MapPath("/upload")&"" 合法。
    第三个参数表示是否自动更名(即保存成.txt这样的文件)。True 表示自动保存,False 表示采用表单中的文件名或第二个参数中指定的文件名保存。
  5. 此文件上传类原作者为梁无惧,孙立宇等人改进其安全性并更名为先锋上传类,我在先锋上传类的基础上做了改动,使之配合 ASP Validator 工作。我已经尽量注意安全性的处理,如果有朋友发现上传漏洞,请立刻告诉我,谢谢!

通过以上三个例子,相信您对 ASP Validator 有了一个大致的了解,并且马上能在项目中使用。如果您想仔细研究 ASP Validator 并扩展它的功能,请继续阅读下一节。当然,阅读 ASP Validator 的源码也是个好主意,事实上它很简单。

4、程序员参考 [ 顶端 ]

属性

  1. Conn 属性
  2. RemoteSubmit 属性
  3. Err 属性

方法

  1. Add 方法
  2. AddElement 方法
  3. Update 方法
  4. Validate 方法

Conn 属性

描述:设置数据库连接对象。当您使用 Equal 规则类型并使用以 "SQL:" 引导的规则参数时,必须设置此参数。

语法

Set objValidator.Conn = objConn

说明objConn 参数总是一个可用的数据库连接对象。

RemoteSubmit 属性

描述:设置是否允许远程提交。

语法

objValidator.RemoteSubmit = True | False

说明:设置为 True 时允许远程提交,否则不允许。默认为 False

Err 属性

描述:返回验证后产生的出错信息。

语法

objValidator.Err

Add 方法

描述:添加规则。

语法

objValidator.Add Element, RegType, ErrMsg, Para

说明Element 参数为应用该规则的表单元素名称;RegType 参数为规则类型;ErrMsg 参数为不符合规则时的出错信息;Para 参数为规则参数,正则类规则无需参数。参考下表:

规则类型验证功能参数
BadWords 脏字检测 脏字列表,以竖线"|"分隔
CheckIP 检验IP是否在允许范围内 [IP]:Allow/Refuse 格式,多条规则以 ; 分隔
[IP]可以是单一IP,如:
也可以是IP段,如:
还可以使用通配符*,192.168.* 与 等价
注意:* 与 - 不能同时使用。
-192.168.18.20 也是合法的,相当于-.254 并 .* 并
多条规则如有矛盾,遵循“后来居上”原则,即后面的规则有较高优先级
示例:*:Allow;.*:Refuse;:Allow 表示除以外的.*都将被禁止,其它的都允许。
Custom 自定义正则表达式 自定义正则表达式
Equal 等于某个值 具体的字符串(多值请用 | 分隔)
或者 SQL:[单字段 SELECT 语句]
可用 {Element} 表示表单中某元素的值
Length 字符串长度 n,m (n 和 m 分别代表最小长度和最大长度,如果省略则代表不限)
NotEqual 不等于某个值 与 Equal 相同
Chinese 中文 正则类型
Currency 货币格式 正则类型
Double 实数 正则类型
English 英文 正则类型
Integer 整数 正则类型
Number 数字 正则类型
Phone 电话号码格式 正则类型
QQ QQ号码 正则类型
Related 是否同时有值/无值 与该元素相关联的元素名称
Require 必填项 正则类型
URL 基于HTTP协议的网址格式 正则类型
Zip 邮政编码 正则类型

AddElement 方法

描述:添加虚拟的表单元素

语法

objValidator.AddElement Name, Value

说明Name 为元素名,不能为空或者表单中已经存在的元素名;Value 为元素值。

Update 方法

描述:更新表单元素的值

语法

objValidator.Update Name, Value

说明Name 为元素名,该元素必须存在;Value 为元素值。

Validate 方法

描述:执行验证并返回验证结果

语法

objValidator.Validate

说明:本方法返回一个是否通过验证的布尔值,如果没通过,可以从 Err 属性取得出错信息。

5、常见问题与解答 [ 顶端 ]

  1. 问:ASP Validator 支持 Cookie、Session、Request.ServerVariables、以 GET 方式提交的数据验证吗?
    答:是的,可以用 AddElement 方法添加任何字符串作为虚拟表单元素。以 GET 方式提交的数据可以直接使用。
  2. 问:ASP Validator 能处理 enctype 属性为 multipart/form-data 的表单吗?
    答:是的。加上这么一句就行了:blnUploadForm = True。注意:必须确保此语句在 Set objValidator = New Validator 也即实例化之前。validator.cls.asp 已包含 blnUploadForm 的定义,因此不必在你的代码中 Dim blnValidator。

6、关于 ASP Validator [ 顶端 ]

  1. 感谢 我佛山人。他写的 Validator(Javascript写的客户端验证器)很实用,并让我萌发了写 ASP Validator 的动机。配合 Validator 使用效果更佳。
  2. 感谢我的兄弟BeginXtu、Ralfmmx。他们测试了 ASP Validator 并提了很多建议。
  3. 这是我学习 ASP 以来第一次写类,不足之处还恳请大家批评指正。ASP Validator 是免费的,您可以在任何场合中自由地使用它。如果您对它作了改进,请发邮件给我(Nowgoo at Gmail dot Com),谢谢!
Tags (标签) 引用通告地址 (0)  
Tags: Asp
复制引用地址http://www.gogogo8.com/ver2/Blog/trackback.asp?tbID=158
复制引用地址http://www.gogogo8.com/ver2/Blog/trackback.asp?tbID=158&CP=GBK
暂时没有评论
发表评论 - 注意输入验证码![本站已启用NoFollow标签]
作者:
用户:  密码:   注册?  验证:  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情
 
18 active user(s) in 10 minites. 0 member(s). 18 guest(s). 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 游客 Guest 回到页面顶部
Mainly Powered by L-Blog , Styled & Modified by water . © 2005 . Processed in 0.219727 second(s) , 10 queries .
Name : Water  QQ : 26998026  MSN : linweb  Web : http://www.gogogo8.com/ 
用户名:   

密   码:   
     IT新动态 (45) RSS 2.0
     平面设计 (162) RSS 2.0
     VS 2005 (5) RSS 2.0
     动画制作 (40) RSS 2.0
     网页制作 (81) RSS 2.0
     编程开发 (59) RSS 2.0
     帮助文档 (7) RSS 2.0
     品吧好站 (30) RSS 2.0
     乱七八糟 (42) RSS 2.0

   

   

     2005年, 12月份
     2005年, 11月份
     2005年, 10月份
     2005年, 9月份
     2005年, 5月份
     2005年, 4月份
     2005年, 3月份
     2005年, 2月份
     2005年, 1月份


 
BLOG编码找找吧
共同创作协议RSS 2.0
找找吧 | Http://www.gogogo8.com/--为广大WEB设计、制作、开发爱好者提供原创并搜集精品文章的小站:平面设计-动画制作-网页制作-编程开发 Archive

gogogo8.com v 4_3