当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET表单验证方法详解

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET表单验证方法详解


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 138 ::
收藏到网摘: n/a

在表单提交的时候,经常需要对录入信息的长度、格式、内容等进行验证,以便获得合理的信息。在ASP.NET开发中主要的验证方法,我总结了一下,主要有一下几种,如有不足之处请朋友们予以指出。 1、使用验证控件
这属于客户端验证,微软开发人员将最常用的验证功能进行了封装,使得我们开发效率明显提高,而且特别是自定义验证控件,非常灵活,我们可以自行设计验证逻辑。但是验证控件收到了浏览器的限制,记得在一次开发过程中,使用FireFox浏览器进行浏览,发现所有的验证控件失灵,这个并非是ASP.NET设计的漏洞,只能说浏览器标准的不唯一造成的。
ASP.NET公有六种验证控件,分别如下: 
RequiredFieldValidator(必须字段验证) 用于检查是否有输入值
CompareValidator(比较验证) 按设定比较两个输入
RangeValidator(范围验证) 输入是否在指定范围
RegularExpressionValidator(正则表达式验证) 正则表达式验证控件
CustomValidator(自定义验证) 自定义验证控件
ValidationSummary(验证总结) 总结验证结果
2、使用JS验证
JS验证,出现的比较早,也属于客户端验证,其灵活、适用的性能深得人们的喜好。
3、后台程序验证
尽管客户端验证比较灵活,但是其局限性也很明显,服务器端验证必不可少。
(1) 安全性 如若恶意攻击者,将客户端页面的验证控件和JS验证全部抹去,而服务器端又没有做出有效的验证处理,必将给攻击者带来很大的漏洞,其后果不堪设想。
(2) 客户端验证的局限性,比如用户注册,需要判定用户名是否存在,这个需要从数据库查询进行判定.
(3) 功能强大 各种验证功能都可以在这里实现。
缺点:增加服务器端负担
4、Ajax类的验证
这个结合了客户端验证和服务器端验证。因为使用ajax框架,性能上付出的代价较小,但是用户体验和编码的简易度提高了。
而在进行验证过程中,对于不同格式的验证,就需要强大灵活的正则表达式了。
使用正则表达式进行验证:
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
关于正则表达式的详细信息请查看:http://www.regexlab.com/zh/regref.htm
正则表达式用于字符串处理、表单验证等场合,实用高效,所以其应用非常广泛,下面我就通过几个例子来说明正则表达式在验证中的具体应用。
在这里我以验证电话号码的格式为例进行介绍。
<1>使用JS验证
复制代码 代码如下:
<2>使用验证控件
自定义验证控件:
复制代码 代码如下:

<asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="tbMobile" ClientValidationFunction="checkCellPhone"></asp:CustomValidator>

正则表达式验证控件(当然这种方法需要加入非空验证)
复制代码 代码如下:

<asp:RegularExpressionValidator ID="revPhone" runat="server" ControlToValidate="tbPhone" ValidationExpression="^(013|015|13|15)\d{9}$" ErrorMessage="手机号码格式错误!"></asp:RegularExpressionValidator>

<3>使用服务器端程序验证
复制代码 代码如下:

public static bool ValidatePhone(string phone)
{
return System.Text.RegularExpressions.Regex.IsMatch(phone, @"^[1]+[3,5]+\d{9}");
}

上述的是一个简单的应用实例,只要你知道正则表达式的写法,你可以随意将上面实例中的正则表达式进行替换,将一些逻辑进行修改,就能够满足你在验证方面,可以说足够满足你常用的验证。在这里我也收集了一些常用的正则表达式,希望能够对大家有所帮助。
复制代码 代码如下:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
备注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
备注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
备注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
备注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
备注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
备注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
备注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18}
备注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
备注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
备注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串