周村网站制作价格低,简洁大气企业网站源码 后台,有关网站开发的外文文献,大学网站建设方案填问卷赢好书华章读者调研活动结果公布 本篇要讲述的知识点如下#xff1a;数据验证介绍纯客户端脚本验证asp.net验证控件概述RequiredFieldValidator控件CompareValidator控件RangeValidator控件正则表达式RegularExpressionValidator控件CustomValidator控件ValidationSumma… 填问卷赢好书华章读者调研活动结果公布 本篇要讲述的知识点如下数据验证介绍纯客户端脚本验证asp.net验证控件概述RequiredFieldValidator控件CompareValidator控件RangeValidator控件正则表达式RegularExpressionValidator控件CustomValidator控件ValidationSummary控件 分组校验技术 数据验证介绍在我们的开发中要提高网站的健壮性为了做到这些笔者曾经在企业培训时候提到了两个原则第一条原则就是尽量减少让用户输入的机会比如数据的录入时间我们可以设置该条记录的为数据库的当前时间这个可以在创建或者设计表的时候实现。下面就是一个例子 create table ActionLog ( LogID bigint identity(1,1), UserID int not null, UserIP varchar(15) not null, ActionDate datetime null default getdate(), ActionDescription nvarchar(800) not null, ActionStatus tinyint not null, WebSiteID int not null, constraint PK_ACTIONLOG primary key (LogID) ) Go 上面中的ActionDate字段就是设置成自动获取数据库服务器当前时间这样在插入记录的时候无需在这个字段插入值。如果这个值让用户填写一来可能用户不能按照我们要求的格式填写二来即使按照我们的要求填写也可能用户不会填写当前时间如果采用上面的办法就能有效避免这个问题。第二条原则就是不要过分相信用户一定会按照我们的要求规规矩矩去做。最终使用我们的软件产品的用户大都计算机水平不高如果水平高可能就会自己开发了所以他们可能不太懂得什么格式和要求之类的这就经常需要对用户填写的数据进行检查。如果我们对用户提交的数据经过充分检查那么就能有效提高程序的健壮性这样也能从某些途径堵住了黑客入侵我们系统的路子。
对数据的检查按时机来分可以分为客户端检查和服务器端检查。
在客户端检查是指通过客户端脚本如javascript脚本或者vbscript脚本来进行检查利用客户端脚本检查的好处是减小网络流量、减轻服务器压力和反映迅速。因为客户端脚本是在客户端运行我们可以定义好检验规则在客户端就可以完成检验一旦不能通过验证客户端马上就能得到提示而不用将整个表单提交到服务器笔者早些年曾经就有这样的经历网速28.8K的情况下提交一个注册表单数分钟后得到服务器的反馈说是用户名不符合要求当时差点吐血用户体验非常好。客户端验证也有一些缺点因为我们的验证规则完全定义在客户端脚本中不怀好意的窥探者可以从这些客户端代码找出我们脚本的漏洞或者某些跳过脚本验证的方法从而造成网站的健壮性出现问题这就对客户端代码的客户端脚本编程能力提出了挑战。另外客户端验证可能会使我们写得非常优秀的代码在短短几天流传整个网络不能进行版权控制。在服务器端检查是指将表单提交到服务器后在服务器上用服务器端代码进行验证如用C#或者VB.NET等服务器端验证的优点是我们的验证规则对用户来说是一个黑匣子比较难找出我们验证代码的漏洞并且服务器端验证的代码编写起来相对客户端脚本要容易得多但是服务器端验证也有缺点那就是大量的复杂验证会降低服务器的性能。因此一般验证办法都是上面两种样式结合利用客户端验证建立验证的第一道关卡这个关卡将大量无意中填写的不符合要求的数据阻止在客户端然后在服务器端建立第二道关卡将那些利用了我们的客户端脚本漏洞的数据阻止在保存之前。
客户端脚本验证下面是一个利用客户端脚本在客户端进行验证的例子。我们对Button服务器控件的OnClientClick加上一个客户端验证方法只有当这个客户端方法返回true的时候表单才会向服务器提交如果用户填写的数据不符合要求就返回false值。下面是前台代码后台没有编写任何代码 % Page LanguageC# AutoEventWireuptrue CodeFileClientValidate.aspx.cs InheritsClientValidate % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlnshttp://www.w3.org/1999/xhtml head runatserver title纯客户端脚本验证的例子/title script languagejavascript typetext/javascript //当这个方法返回false的情况下就不会向服务器提交数据 function checkForm() { //如果没有填写任何数据 if(document.form1.txtUserName.value) { alert(用户名不能为空); return false; } var lengthdocument.form1.txtUserName.value.length; //如果填写内容长度不在6到10字符之间 if(length6||length10) { alert(用户名必须是6到10个字符); return false; } else { return true; } } /script /head body form idform1 runatserver div table border0 trtd用户名/tdtdasp:TextBox IDtxtUserName runatserver/asp:TextBox/td/tr trtdasp:Button IDbtnOK runatserver Text提交 OnClientClickjavascript:return checkForm(); OnClickbtnOK_Click //tdtdinput typereset value清空 //td/tr /table /div /form /body /html 运行效果如下 如果用户没有填写任何数据就提交表单会得到如下提示 如果我们填写的字符个数不是6到10个之间提交表单会看到如下效果 通过上面的例子展示了如何在asp.net中如何利用客户端脚本对表单进行验证经过上面的大家也能感觉得到用客户端脚本对表单进行验证的编码特点可以灵活控制验证方法但是编写客户端脚本比较麻烦调试起来也不太容易在目前还没有一款比较好的javascript脚本编写和调试的软件。为了提高开发asp.net网站的速度微软提供了一套asp.net的验证控件。 asp.net验证控件概述所有的asp.net验证控件都直接或者间接派生自BaseValidator这个抽象类BaseValidator类定义了验证控件的一些共有属性和方法。验证控件用于验证与其关联的输入控件的值当用户的输入不能通过验证时将会显示预定义的错误提示信息。验证控件的位置并没有规定可以在页面的任意位置放置验证控件但是一般为了直观起见尽量将验证控件靠近要验证的控件的位置。asp.net验证控件可以对以下类型的asp.net控件的值进行验证 控件名要验证的属性备注DropDownListSelectedValue验证选中项的值FileUploadFileName验证要上传的文件名ListBoxSelectedItem.Value验证选中的第一项的值RadioButtonListSelectedItem.Value验证选中项的值TextBoxText验证文本框的值HtmlInputFileValue验证HTML服务器上传控件中的文件名HtmlInputPasswordValue 验证HTML服务器文本控件的值HtmlInputText Value验证HTML服务器文本控件的值HtmlSelectValue验证HTML服务器下拉控件选中的值HtmlTextAreaValue验证HTML服务器多行文本控件的值 从上表中我们可以看出验证控件验证的控件类型只能是asp.net服务器控件和HTML服务器控件而不能验证普通HTML控件如果要普通HTML控件进行验证只能像笔者在上一个例子中演示的那样自己编写客户端脚本代码进行验证。在默认情况下asp.net服务器控件将首先在客户端进行验证然后再发送到服务器端进行验证当然也可以设置它的EnableClientScript属性来指定是否需要在客户端进行验证。BaseValidator类有如下常见属性 属性名说明ControlToValidate待验证的控件的IDDisplay错误信息的显示方式有None、Static和Dynamic默认为StaticEnableClientScript是否启用客户端验证Enabled是否启用验证控件ErrorMessage验证失败时显示的信息IsValid关联的控件是否通过验证SetFocusOnError当验证失败时是否将焦点移动到关联的控件上Text验证失败时在验证控件中要显示的信息ValidationGroup验证控件所在的分组名
对上面几个属性做一点说明1Display属性是决定如何显示错误消息的默认是Static即始终为错误信息分配显示空间Dynamic方式是只在需要的时候才为错误信息分配显示空间而None方式是将错误信息集中到ValidationSummary控件中显示。2ErrorMessage属性是待验证控件不能通过验证的时候在ValidationSummary控件中显示要显示的信息Text属性是待验证控件不能通过验证是在验证控件中显示的信息如果只设置了ErrorMessage属性而没有设置Text属性并且Display方式不为None时将会显示ErrorMessage属性的值。3ControlToValidate是必须指定的否则在运行的时候将会报错。 RequiredFieldValidator控件RequiredFieldValidator控件也被称之为必填验证控件顾名思义也就是与RequiredFieldValidator控件关联的控件的值在默认设置下必须填写。笔者在这里用了个限定词“在默认设置下”是因为RequiredFieldValidator控件除了BaseValidator中定义的属性之外还有一个比较重要的属性InitialValue。默认情况下这个属性的值是String.Empty如果控件的值与它的默认值一致就不能通过验证即如果关联的控件没有填写的话就不能通过验证在验证DropDownList控件的时候我们也可以使用RequiredFieldValidator控件不过需要设置RequiredFieldValidator控件的InitialValue属性。下面我们通过一个例子来演示RequiredFieldValidator控件如何验证TextBox控件和DropDownList控件。在程序中我们给DropDownList控件添加了一个默认选项“请选择”一旦用户没有改变DropDownList控件的选中值就不能通过验证。在设置验证控件的关联控件时验证控件会自动找出当前页面中哪些控件是可以进行验证的如下图注意在上图中控件ID不是TextBox1或者DropDownList这种默认形式是因为我更改了其默认ID。在实际开发中我一般会更改控件的默认ID用一个比较直观的ID这样便于我们在代码中操作。我对服务器控件的ID命名一般遵循控件类型前缀加控件用户的办法下面举例说明
控件类型前缀举例TextBoxtxttxtUserNameLabellblbServerTimeDropDownListddlddlStateLiteralllTitleButtonbtnbtnOKRadioButtonrbrbMaleCheckBoxcbcbApply
这样的做法比整个页面一堆Button1、Button2及TextBox1、TextBox2强得多基本上能做到望文知义。 因为只是演示验证控件的验证效果所以没有什么后台代码采用了单页模式。下面是实例代码 % Page LanguageC# % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd script runatserver /script html xmlnshttp://www.w3.org/1999/xhtml head runatserver titleRequiredFieldValidator控件用法的例子/title /head body form idform1 runatserver div table border1 width400 trtd用户名/tdtd asp:TextBox IDtxtUserName runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator1 runatserver ControlToValidatetxtUserName ErrorMessage用户名必须填写/asp:RequiredFieldValidator/td/tr trtd省份/tdtd asp:DropDownList IDddlState runatserver asp:ListItem SelectedTrue请选择/asp:ListItem asp:ListItem Value1湖北/asp:ListItem asp:ListItem Value2湖南/asp:ListItem asp:ListItem Value3山东/asp:ListItem asp:ListItem Value4山西/asp:ListItem asp:ListItem Value5河南/asp:ListItem asp:ListItem Value6河北/asp:ListItem /asp:DropDownList asp:RequiredFieldValidator IDRequiredFieldValidator2 runatserver ControlToValidateddlState ErrorMessage请选择省或者直辖市 InitialValue请选择/asp:RequiredFieldValidator/td/tr trtd asp:Button IDbtnOK runatserver Text提交 / /tdtd input idReset1 typereset valuereset //td/tr /table /div /form /body /html 下面是运行效果当我们直接点击“提交”之后的效果 一旦我们填写了用户名并且选择一个省份而不是让“请选择”处于选中状态那么这个表单就能提交到服务器进行处理了。在这个例子里我们没有写一行客户端脚本代码。 CompareValidator控件CompareValidator控件也被称之为比较验证控件它是用来验证两个控件的值或者控件与某个值之间的关系除了在BaseValidator中定义的属性之外CompareValidator控件还定义了如下属性 属性名说明ControlToCompare要与所验证的输入控件进行比较的输入控件的IDOperator要执行的比较操作Type对控件的值按照哪种方式进行比较默认StringValueToCompare设置要与所验证的控件的值进行比较的值 说明因为在输入控件中可以输入货币、浮点数、整数及字符串等所以需要设置控件的值按照什么类型的值进行验证可以进行验证的类型有如下 类型说明Currency按货币类型比较小数点后最多两位数字Date按日期类型比较不带时分秒Double按浮点数类型比较Integer 按整数类型比较String按字符串类型比较 在进行验证的时候还可以指定两个值之间满足什么关系不能通过验证这个关系可以通过设置Operator属性来指示分别有LessThan、LessThanEqual、! NotEqual、Equal、GreaterThan及GreaterThanEqual。另外有时候我们可能不是将两个控件的值进行比较而是将所验证的控件的值与某个指定的值进行比较那么可以不设置ControlToCompare属性的值而设置ValueToCompare属性的值验证的时候将用ValueToCompare属性的值与所验证的控件的值按照Type属性指定的类型和Operator属性定义的比较操作来进行验证。注意请不要同时设置ControlToCompare属性和ValueToCompare属性如果同时指定了这两个属性则ValueToCompare属性优先。CompareValidator控件用得比较多的场合就是用于确保用户在注册时两次输入的密码一致还有在某些场合下有一定先后顺序的日期数据比如某个事件的开始日期和结束日期。经常看香港警匪片的朋友一定会对警察抓捕嫌疑犯时经常说的那句“你有权保持沉默但是你所说的将来会成为呈堂证供”不陌生在asp.net中除了RequiredFieldValidator控件之外CompareValidator控件、RangeValidator控件和RegularExpressionValidator控件对待所验证的控件也是持这种态度所验证的控件如果没有任何输入也是能通过验证的但是如果输入的数据不符合验证规则就不能通过验证要是要求用户必须输入并且还要符合一定规则上述的控件就需要结合RequiredFieldValidator控件共同验证。在下面的例子中要用户填写一个旅游申请要填写的数据有旅游出发时间、旅游人数、旅游经费及旅游结束时间。根据业务规则在这个表单中有如下要求1出发时间一定早于结束时间。2旅游人数一定要大于0一个人都不参加这个旅游就没有意义了。3旅游经费可以不填写难以估算但一旦填写就必须填写大于0.00的金额。在这里所有的验证都是用CompareValidator控件结合RequiredFieldValidator控件来进行验证RequiredFieldValidator控件验证所验证的控件是否填写了数据CompareValidator控件负责进行比较验证代码如下 % Page LanguageC# % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd script runatserver /script html xmlnshttp://www.w3.org/1999/xhtml head runatserver titleCompareValidator灵活使用的例子/title /head body form idform1 runatserver div table border1 width600 trtd colspan2 aligncenter旅游活动申请表/td/tr trtd 开始时间/tdtd asp:TextBox IDtxtStartDate runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator1 runatserver ControlToValidatetxtStartDate ErrorMessage用户名必须填写/asp:RequiredFieldValidator asp:CompareValidator IDCompareValidator1 runatserver ErrorMessage开始日期必须早于结束日期 ControlToComparetxtStartDate ControlToValidatetxtEndDate OperatorGreaterThanEqual TypeDate/asp:CompareValidator/td/tr trtd 结束时间/tdtd asp:TextBox IDtxtEndDate runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator2 runatserver ControlToValidatetxtEndDate ErrorMessage请填写结束时间/asp:RequiredFieldValidator /td/tr trtd 参加人数/tdtd asp:TextBox IDtxtNumber runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator3 runatserver ControlToValidatetxtNumber ErrorMessage必须填写人数/asp:RequiredFieldValidator asp:CompareValidator IDCompareValidator2 runatserver ControlToValidatetxtNumber ErrorMessage人数必须大于0 OperatorGreaterThan TypeInteger ValueToCompare0/asp:CompareValidator/td/tr trtd 经费预算/tdtd asp:TextBox IDtxtMoney runatserver/asp:TextBox asp:CompareValidator IDCompareValidator3 runatserver ControlToValidatetxtMoney ErrorMessage经费必须是大于0的数字 TypeCurrency ValueToCompare0 OperatorGreaterThan/asp:CompareValidator/td/tr trtd asp:Button IDButton2 runatserver Text提交 / /tdtd input idReset3 typereset value重置 //td/tr /table /div /form /body /html 下面不填写任何信息提交表单的效果 从上图我们可以得出一个结论因为经费预算只使用了CompareValidator控件所以如果用户不填写任何信息是能够通过验证的。现在我们填写表单这里故意将结束时间设置得比开始时间早并且在参加人数中填写了一个“q”下面是提交表单的效果 从上面的效果我们可以得出下面的结论1如果填写数据不能按照期望的数据类型进行转换时是不能通过验证的因为我们期望用户在参加人数一栏填写大于0的数字用户填写了英文字母所以不能通过验证。同理如果用户在经费预算一栏中填写了不能转换成货币的数字即小数点后最多两位数字的浮点数、在开始时间或者结束时间填写了不能转换成日期的数据都是不能通过验证的。2验证控件的Display属性默认为Static在这种情况下即使所验证的控件通过了验证但是页面仍然为其分配了显示控件比如用于验证开始时间、结束时间和参加人数的RequiredFieldValidator控件虽然满足了必须填写的要求可是因为它们的属性都是static的所以当不能通过CompareValidator控件的验证时CompareValidator控件的错误提示信息仍然与文本框保持了一段距离。现在我们把页面上所有验证的Display的属性设置为Dynamic也就是仅在必要的时候页面才为其分配显示空间因为Display属性是所有验证控件所共有的属性所以我们可以按住Ctrl键的同时用鼠标选取所有的验证控件然后集中设置所有控件的Display属性如下图 我们重新运行页面填写和上次一样的信息然后提交表单这次的错误提示信息与文本框之间的距离就没有刚才那么明显了效果如下 这是如果我们将开始时间和结束时间的值互换并且在参加人数一栏填写大于0的整数时就能提交表单到服务器进行处理。提示其实所有的错误信息都是通过span/span方式输出的当验证控件的Display属性为Static时输出的span格式是“span stylecolor:Red; visibility:hidden;/span”这样的形式当Display属性为Dynamic时输出的span格式是“span stylecolor:Red; display:none;/span”这样的形式。 RangeValidator控件RangeValidator控件也称之为范围验证控件也就是只有当用户填写的非空数据不在指定的范围之间时就不能通过验证。除了具有BaseValidator所有的属性之外它还具有如下常见属性 属性名说明MaximumValue允许的最大值MinimumValue允许的最小值Operator要执行的比较操作Type对控件的值按照哪种方式进行比较默认String 下面是一个RangeValidator控件的例子。比如在实际中开发一个婚恋网站里面有一栏是填写用户生日的有一栏是用户填写生日信息的因为婚恋网站是针对成年人的所以我们可以根据用户填写的生日来确保用户填写表单时年龄在18岁至100岁之间不要告诉我超过了100岁的人还搞婚恋I服了U如果未超过18岁则不能注册这个时间是根据用户填写表单的时间进行判断的所以我们没有直接给RangeValidator控件赋最大值和最小值而是在页面运行获取当前服务器时间用户所能填写的生日必须当前日期之前100年至18年之间这样就保证了用户在注册时年龄在18岁至100之间。下面是代码 % Page LanguageC# % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd script runatserver protected void Page_Load(object sender, EventArgs e) { //注意因为是需要根据填写表单的日期动态判断 //所以在这里动态给RangeValidator赋最大值和最小值 DateTime minimumValueDateTime.Now.AddYears(-100); DateTime maximumValue DateTime.Now.AddYears(-18); RangeValidator1.MinimumValue minimumValue.ToString(yyyy-MM-dd); RangeValidator1.MaximumValue maximumValue.ToString(yyyy-MM-dd) ; } /script html xmlnshttp://www.w3.org/1999/xhtml head runatserver titleRangeValidator控件验证的例子/title /head body form idform1 runatserver div table border1 width600 trtd colspan2 aligncenter 周公婚恋交友网/td/tr trtd 生日/tdtd asp:TextBox IDtxtBirthday runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator1 runatserver ControlToValidatetxtBirthday ErrorMessage生日必须填写 DisplayDynamic/asp:RequiredFieldValidator asp:RangeValidator IDRangeValidator1 runatserver DisplayDynamic ErrorMessage你的年龄不能注册 MaximumValue MinimumValue TypeDate ControlToValidatetxtBirthday/asp:RangeValidator/td/tr trtd asp:Button IDButton2 runatserver Text提交 / /tdtd input idReset3 typereset value重置 //td/tr /table /div /form /body /html 下面是运行结果 正则表达式正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式提取、编辑、替换或删除文本子字符串或将提取的字符串添加到集合以生成报告。对于处理字符串例如 HTML 处理、日志文件分析和 HTTP 标头分析的许多应用程序而言正则表达式是不可缺少的工具。正则表达式是一个非常有用的技术有人曾称之为能让程序员不至于丢掉饭碗的十大技术之一可见它的重要性。完全详细讲述正则表达式的用法可能需要厚厚一本书我也曾经见过一本厚厚的讲述正则表达式的英文书但是在本系列课程里限于篇幅只能做一个简单的介绍有兴趣的朋友可以参考其它书籍。熟悉DOS或者命令行的朋友或许已经用过类似的功能比如我们要查找某个文件夹下所有的低于Word2007版本的Word文件因为低于Word2007版本的Word文件的文件后缀是.doc而Word2007版本的Word文件的文件后缀是.docx我们可以在命令行下执行这个命名dir *doc下面是在笔者的电脑上执行的结果 元字符说明.匹配除 /n 以外的任何字符。[abcde]匹配abcde之中的任意一个字符[a-h]匹配a到h之间的任意一个字符[^fgh]不与fgh之中的任意一个字符匹配/w匹配大小写英文字符及数字0到9之间的任意一个相当于[a-zA-Z0-9]/W不匹配大小写英文字符及数字0到9之间的任意一个相当于[^a-zA-Z0-9]/s匹配任何空白字符相当于[ /f/n/r/t/v]/S匹配任何非空白字符相当于[^/s]/d匹配任何0到9之间的单个数字相当于[0-9]/D不匹配任何0到9之间的单个数字相当于[^0-9] 上面的元字符都是针对单个字符匹配的要想同时匹配多个字符的话还需要借助限定符。下面是一些常见的限定符(下表中n和m都是表示整数) 限定浮说明*匹配0到多个元字符相当于{0,}?匹配0到1个元字符相当于{0,1}{n}匹配n个元字符{n,}匹配至少n个元字符{n,m}匹配n到m个元字符匹配至少1个元字符相当于{1,}^字符串必须以指定的字符开始$字符串必须以指定的字符结束 说明1由于在正则表达式中“/”、“?”、“*”等字符已经具有一定特殊意义如果需要用它们的原始意义则应该对它进行转义例如希望在字符串中至少有一个“/”那么正则表达式应该这么写//。2可以将多个元字符或者原义文本字符用括号括起来形成一个新的元字符比如^(13)[0-9]/d{8}$表示任意以13开头的手机号码。3另外对于中文字符的匹配是采用其对应的Unicode编码来匹配的对于单个Unicode字符如/u4e00表示汉字“一” /u9fa5表示汉字“龥”在Unicode编码中这分别是所能表示的汉字的第一个和最后一个的Unicode编码在Unicode编码中能表示20901个汉字。不要认为我记性好我是从来不记这个的每次用的时候我都会写一个小程序查看其运行结果就行了。下面是我这个程序的代码 using System; using System.IO; public class UnicodeDemo { public static void Main() { using (StreamWriter writer new StreamWriter(new FileStream(Unicode.txt, FileMode.Create))) { int value 0; //从字符的所能表示的最小值到最大值进行遍历 for (char c char.MinValue; c char.MaxValue; c) { value (int)c; //按照 数值Unicode值字符 的方式写入到Unicode.txt文件中 //19968/u4e00一 即第一个汉字 //40869/u9fa5龥 即最后一个汉字 writer.WriteLine({0}//u{1}{2}, value,value.ToString(x), c); } } } } 将代码编译生成Windows下的控制台程序运行会在上面会抛出异常因为有些字符在笔者所使用的编码范围中无法表示不过这不影响我们查看汉字的范围。最后生成的文件内容如下 因为汉族的人名最少两个汉字比如张三最多四个汉字比如东方不败所以匹配汉族的人名可以用这样的形式[/u4e00-/u9fa5]{2,4}。 RegularExpressionValidator控件RegularExpressionValidator控件就是利用正则表达式来验证其它控件的值的控件。除了具有BaseValidator所有的属性之外它还具有一个常见属性ValidationExpression。这个属性就是用来设置用于匹配所要验证控件的值的正则表达式。RegularExpressionValidator控件提供了一个正则表达式编辑器内置了一些常见的正则表达式当我们在属性窗口设置RegularExpressionValidator控件时会看到如下效果 点击ValidationExpression一栏右边的省略号会出现如下界面 如果时一些常用的正则验证可以使用使用提供标准表达式。下面是RegularExpressionValidator控件用法的例子 % Page LanguageC# AutoEventWireuptrue CodeFileRegularExpressionValidatorDemo.aspx.cs InheritsRegularExpressionValidatorDemo % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlnshttp://www.w3.org/1999/xhtml head runatserver titleRegularExpressionValidator控件的例子/title /head body form idform1 runatserver div table border1 width600 trtd colspan2 aligncenter 周公婚恋交友网/td/tr trtd 真实姓名/tdtd asp:TextBox IDtxtUserName runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator1 runatserver ControlToValidatetxtUserName ErrorMessage姓名必须填写 DisplayDynamic/asp:RequiredFieldValidator asp:RegularExpressionValidator IDRegularExpressionValidator1 runatserver ErrorMessage姓名是2到4个汉字 ControlToValidatetxtUserName DisplayDynamic ValidationExpression[/u4e00-/u9fa5]{2,4}/asp:RegularExpressionValidator/td/tr trtd 手机号/tdtd asp:TextBox IDtxtMobile runatserver/asp:TextBox asp:RequiredFieldValidator IDRequiredFieldValidator2 runatserver ControlToValidatetxtMobile ErrorMessage姓名必须填写 DisplayDynamic/asp:RequiredFieldValidator asp:RegularExpressionValidator IDRegularExpressionValidator2 runatserver ControlToValidatetxtMobile ErrorMessage不正确的手机号 ValidationExpression((13[0-9])|(15[89]))/d{8}/asp:RegularExpressionValidator/td/tr trtd asp:Button IDButton2 runatserver Text提交 / /tdtd input idReset3 typereset value重置 //td/tr /table /div /form /body /html 在例子中要求真实姓名必须是2到4个汉字手机号必须是13开头或者是158、159开头的并且总长度是11位数字。以下是运行效果 CustomValidator控件CustomValidator控件也成为自定义验证控件通过RequiredFieldValidator控件结合CompareValidator控件、RangeValidator控件或RegularExpressionValidator控件之中的一个或多个就能满足asp.net开发中的90%以上的验证要求但是有一些特殊的验证用上述控件组合无法达到验证要求比如要求用户填写一个奇数。为了满足一些特殊的验证要求在asp.net中还有一个CustomValidator控件在这个控件中可以自己写验证规则。CustomValidator类是BaseValidator抽象类所以CustomValidator控件拥有BaseValidator中定义的属性除此之外CustomValidator控件还有以下常见属性 属性名说明ClientValidationFunction用于在客户端执行验证的客户端函数名ValidateEmptyText是否验证空文本即当所验证控件值为空时时候执行客户端验证 CustomValidator控件用于在客户端验证的函数有两个参数第一个是表示被验证的控件第二个表示事件数据。第二个参数有两个属性IsValid用于表示被验证控件是否通过验证Value属性表示被验证的控件的值。下面就是一个客户端验证函数的例子 script languagejavascript typetext/javascript //obj表示被验证的控件 //args表示事件数据args有两个属性 //IsValid指示控件是否通过验证 //Value表示被验证的控件的值 function CheckEven(obj,args) { var numberPattern//d/; //由于控件的ValidateEmptyText设置为true //所以当控件没有值时进行客户端验证 if(!numberPattern.test(args.Value))//用javascript进行客户端正则验证 { args.IsValidfalse;//表示未通过验证出现错误提示 } else if(args.Value%20) { args.IsValidtrue;//表示通过验证不出现错误提示 } else { args.IsValidfalse;//表示未通过验证出现错误提示 } } /script 除了客户端验证之外在CustomValidator控件中还能自己写服务器端写验证方法它有一个OnServerValidate事件同它的客户端处理函数一样处理这个事件的委托也需要两个参数第一个是表示被验证的控件第二个表示事件数据。第二个参数有两个属性IsValid用于表示被验证控件是否通过验证Value属性表示被验证的控件的值。它服务器端验证方法设置界面如下 下面我们用一个例子来说明CustomValidator控件的用法在这里例子里用户被要求输入两个数一个必须是2的倍数一个必须是3的倍数。用CustomValidator控件就能很轻松完成这个功能。下面是前台代码 % Page LanguageC# AutoEventWireuptrue CodeFileCustomValidatorDemo.aspx.cs InheritsCustomValidatorDemo % !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlnshttp://www.w3.org/1999/xhtml head runatserver titleCustomValidator验证控件用法的例子/title script languagejavascript typetext/javascript //obj表示被验证的控件 //args表示事件数据args有两个属性 //IsValid指示控件是否通过验证 //Value表示被验证的控件的值 function CheckEven(obj,args) { var numberPattern//d/; //由于控件的ValidateEmptyText设置为true //所以当控件没有值时进行客户端验证 if(!numberPattern.test(args.Value)) { args.IsValidfalse;//表示未通过验证出现错误提示 } else if(args.Value%20) { args.IsValidtrue;//表示通过验证不出现错误提示 } else { args.IsValidfalse;//表示未通过验证出现错误提示 } } function CheckMultiple3(obj,args) { //由于控件的ValidateEmptyText没有设置使用了默认值false //所以当控件没有值时不进行客户端验证 var numberPattern//d/; if((!numberPattern.test(args.Value))||(args.Value%3!0)) { args.IsValidfalse; } else { args.IsValidtrue; } } /script /head body form idform1 runatserver div table border1 width600 trtd colspan2 aligncenterCustomValidator验证控件用法的例子/td/tr trtd 填一个3的倍数/tdtd asp:TextBox IDtxtOdd runatserver/asp:TextBox asp:CustomValidator IDCustomValidator2 runatserver ControlToValidatetxtOdd ErrorMessage请输入3的倍数 ClientValidationFunctionCheckMultiple3 DisplayDynamic OnServerValidateCustomValidator2_ServerValidate/asp:CustomValidator/td/tr trtd 填一个偶数/tdtd asp:TextBox IDtxtEven runatserver/asp:TextBox asp:CustomValidator IDCustomValidator1 runatserver ControlToValidatetxtEven ErrorMessage请输入偶数 ClientValidationFunctionCheckEven ValidateEmptyTextTrue OnServerValidateCustomValidator1_ServerValidate/asp:CustomValidator/td/tr trtd asp:Button IDButton2 runatserver Text提交 / /tdtd input id
文章转载自: http://www.morning.jmmzt.cn.gov.cn.jmmzt.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.mpscg.cn.gov.cn.mpscg.cn http://www.morning.scjtr.cn.gov.cn.scjtr.cn http://www.morning.mm27.cn.gov.cn.mm27.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.smggx.cn.gov.cn.smggx.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.fdmtr.cn.gov.cn.fdmtr.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.ggfdq.cn.gov.cn.ggfdq.cn http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.sdhmn.cn.gov.cn.sdhmn.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.lfbzg.cn.gov.cn.lfbzg.cn http://www.morning.bpmth.cn.gov.cn.bpmth.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.yfmwg.cn.gov.cn.yfmwg.cn http://www.morning.hxfrd.cn.gov.cn.hxfrd.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.jzccn.cn.gov.cn.jzccn.cn http://www.morning.lylkh.cn.gov.cn.lylkh.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.sbrrf.cn.gov.cn.sbrrf.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.nnwnl.cn.gov.cn.nnwnl.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.glnfn.cn.gov.cn.glnfn.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.jyknk.cn.gov.cn.jyknk.cn http://www.morning.dthyq.cn.gov.cn.dthyq.cn http://www.morning.qgdsd.cn.gov.cn.qgdsd.cn http://www.morning.jstggt.cn.gov.cn.jstggt.cn http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.qphcq.cn.gov.cn.qphcq.cn http://www.morning.npcxk.cn.gov.cn.npcxk.cn http://www.morning.qdzqf.cn.gov.cn.qdzqf.cn http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.pypqf.cn.gov.cn.pypqf.cn http://www.morning.plfy.cn.gov.cn.plfy.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.fnxzk.cn.gov.cn.fnxzk.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn http://www.morning.dtrz.cn.gov.cn.dtrz.cn http://www.morning.rgtp.cn.gov.cn.rgtp.cn http://www.morning.qzmnr.cn.gov.cn.qzmnr.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.rgwz.cn.gov.cn.rgwz.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.ktrdc.cn.gov.cn.ktrdc.cn http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.rhsr.cn.gov.cn.rhsr.cn http://www.morning.huarma.com.gov.cn.huarma.com http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn