780 likes | 924 Views
第 7 章 验证控件. 在开发 Web 应用程序时,经常遇到验证问题,以检验用户输入数据是否正确或者是否输入了数据。这一部分的工作量非常大,不但加重了程序员的负担,而且使程序代码可读性变差,给以后的维护工作增加了难度。现在, ASP.NET 为我们提供了验证服务器控件,不但简化了验证工作,而且提供了极大的灵活性 。. 本章要点: 验证控件基本知识 必填字段验证控件的使用 比较验证控件的使用 范围验证控件的使用 正则表达式验证控件的使用 自定义验证控件的使用 验证错误摘要控件的使用. 7.1 验证控件基本知识.
E N D
第7章 验证控件 在开发Web应用程序时,经常遇到验证问题,以检验用户输入数据是否正确或者是否输入了数据。这一部分的工作量非常大,不但加重了程序员的负担,而且使程序代码可读性变差,给以后的维护工作增加了难度。现在,ASP.NET为我们提供了验证服务器控件,不但简化了验证工作,而且提供了极大的灵活性。
本章要点: • 验证控件基本知识 • 必填字段验证控件的使用 • 比较验证控件的使用 • 范围验证控件的使用 • 正则表达式验证控件的使用 • 自定义验证控件的使用 • 验证错误摘要控件的使用
7.1 验证控件基本知识 验证就是检验用户输入的数据是否有效。如一个要求用户输入电话号码的文本框,所输入的数据必须是数字,不能是字符。如果用户输入的不是数字,您的Web应用程序应该给出验证结果,并给出错误信息提示;又如在收集用户信息时,要求其必须填入姓名。如果不填入姓名,则给出出错信息。
7.1.1 验证控件验证原理 当用户输入的数据被处理时(如提交网页),ASP.NET把用户数据传送给相应的验证控件,验证控件按照其验证规则检验用户数据,并根据验证是否通过设置其IsValid属性。如果验证通过,则置IsValid属性为true;如果验证未通过,则置IsValid属性为false。如果Web页有多个验证控件,则调用所有验证控件进行验证。如果有任何一个验证控件验证没有通过,则整个网页被设置为无效,即Page类的IsValid属性被设置为false。这样我们就可以通过检验Page类的IsValid属性获知验证是否通过,从而在程序中采取相应对策。 检验Web页是否通过验证的代码形式为: IF Page.IsValid Then 验证通过后要执行的代码 Eles 验证未通过要执行的代码 End IF
7.1.2 客户端验证和服务器端验证 在IE4.0以后,允许使用客户端代码进行客户端验证。所谓客户端验证,就是用户数据不必提交到服务器,在客户端就可以完成验证工作。客户端验证一般使用VBScript或JavaScript脚本语言编程。 客户端验证的优点: 不占用带宽。 验证速度快。 客户端验证的缺点: 有些浏览器不支持客户端验证,因此无法完成客户端验证。 用户有可能绕过客户端验证,从而带来安全问题。
如果想使用客户端验证,可以在Web页的开头加上如下Page指令:如果想使用客户端验证,可以在Web页的开头加上如下Page指令: <%@Page ClientTarget = "UpLevel"%> ASP.NET一般采用服务器端验证,用户数据必须提交到服务器,在服务器上完成验证任务。这样用户就无法绕开验证这一环节,保证了Web应用的安全性和完整性。 如果想使用服务器端验证,可以在Web页的开头加上如下Page指令: <%@Page ClientTarget = "DownLevel"%> 注意: 如果想使用客户端验证,不但要使用Page指令,还要设置验证控件的EnableClientScript属性。
7.1.3 停用验证 在某些特定情况下,有时候需要停用验证。比如用户按下“取消”按钮或导航按钮时,即使用户没有填入全部正确数据,仍然允许提交网页,这时就不能使用验证。 停用验证的方法有三种: 将控件的CausesValidation属性设置为false,则会取消该控件的服务器端验证和客户端验证。 将验证控件的Enabled属性设置为false,则会停用验证控件的服务器端验证和客户端验证。 将验证控件的EnableClientScript属性设置为false,则会停用验证控件客户端验证,但服务器端验证仍会起作用。
7.2 必填字段验证控件RequiredFieldValidator 必填字段验证控件用于要求用户必须输入数据而不能保持空白的场合。如果不提供输入值,则引发验证错误。 在Visual Studio.NET工具箱中,必填字段验证控件的图标是。 双击或用鼠标拖动工具箱中的RequiredFieldValidator控件,可将它加入到Web窗体。重复该操作可加入多个RequiredFieldValidator控件。加入到窗体的RequiredFieldValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。
1.必填字段验证控件的语法格式 <asp:RequiredFieldValidator id="控件标识符" ControlToValidate="关联输入控件的ID" InitialValue="初始值" ErrorMessage="出错信息" Text="出错信息" ForeColor="前景色" BackColor="背景色" …… runat="server" > </asp:RequiredFieldValidator>
必填字段控件的主要属性 以下属性为所有验证控件共有的属性: BackColor:必填字段验证控件的背景色。 ForeColor:验证失败后显示消息的颜色。 Font:必填字段验证控件的字体属性。 BorderColor:必填字段验证控件的边框颜色。 BorderStyle:必填字段验证控件的边框样式。 BorderWidth:必填字段验证控件的边框宽度。 EnableViewState:指示必填字段验证控件是否保持视图状态。true为保持,false为不保持。 Enabled:是否启用验证控件。true为开启,false为不开启。 这些属性在其他验证控件中不再介绍。
必填字段控件的特有属性: ID:控件的标识。 ControlToValidate:与必填验证控件相关联的输入控件,该控件内的值就是需要验证的数据。 ErrorMessage:验证未通过时显示的出错信息。该出错信息可以显示在验证错误摘要控件(参见7.7)上。 Display:必填验证控件出错信息的显示方式。当取值为None时,表示错误出现时不显示,但是可以在验证错误摘要控件中显示;当取值为Static时,表示每个验证控件都会在Web页上占有一定的空间;当取值为Dynamic时,表示除非验证控件显示消息,否则不会在Web页上占用任何空间。 InitialValue:输入控件的初始默认值。如果设置了该属性,则必填字段验证控件检查用户是否修改了该值,而不是检查是否有输入值。即输入控件内的值等于这个初始值,则不能通过验证。 IsValid:指示关联的输入控件是否通过验证。true为通过,false为未通过。 Text:验证未通过时显示的出错信息。它不显示在验证错误摘要控件上,这是它与ErrorMessage属性的区别。
动手做: [例7-1]使用必填验证控件检测用户名和密码 【界面设计】 在Web窗体页上放置两个Textbox控件、两个Label控件、两个RequiredFieldValidator控件及两个Button控件。设计后的效果如图7-1所示。 Web窗体上各控件的属性: RequiredFieldValidator1控件的属性 ControlToValidator:TextBox1(用户名文本框) ErrorMessage:请填写用户名 InitialValue:guest 其他属性按默认设置。 RequiredFieldValidator2控件的属性 ControlToValidator:TextBox2(密码文本框) Text:密码为必填项 其他属性按默认设置。 TextBox1(用户名)的属性 Text:Admin 其他属性按默认设置。 TextBox2(密码)的属性 TextMode:Password 其他属性按默认设置。
Web窗体(WebForm1.aspx文件)的完整代码如下: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="_7_1.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <FONT face="宋体"> <asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute;
TOP: 64px" runat="server" Width="72px" Height="24px">用户名</asp:Label> <asp:Button id="Button2" style="Z-INDEX: 106; LEFT: 152px; POSITION: absolute; TOP: 152px" runat="server" Width="56px" Height="24px" Text="返回"></asp:Button> <asp:TextBox id="TextBox2" style="Z-INDEX: 104; LEFT: 112px; POSITION: absolute; TOP: 104px" runat="server" Width="120px"></asp:TextBox> <asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 64px" runat="server" Width="120px">admin</asp:TextBox> <asp:Label id="Label2" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 104px" runat="server" Width="72px" Height="24px">密码</asp:Label> <asp:Button id="Button1" style="Z-INDEX: 105; LEFT: 56px; POSITION: absolute; TOP: 152px" runat="server" Width="56px" Height="24px" Text="登陆"></asp:Button>
<asp:RequiredFieldValidator id="RequiredFieldValidator1" style="Z-INDEX: 107; LEFT: 240px; POSITION: absolute; TOP: 64px" runat="server" Width="136px" Height="24px" ErrorMessage="(请填写用户名)" InitialValue="guest" ControlToValidate="TextBox1"></asp:RequiredFieldValidator> <asp:RequiredFieldValidator id="RequiredFieldValidator2" style="Z-INDEX: 108; LEFT: 240px; POSITION: absolute; TOP: 104px" runat="server" Width="144px" Height="24px" ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox2">(密码为必填项)</asp:RequiredFieldValidator></FONT> </form> </body> </HTML>
运行结果如图7-2所示。 图7-2 运行结果 图7-2 运行结果
7.3 比较验证控件CompareValidator 比较验证控件将关联输入控件的值同常数值或其他输入控件的值相比较,以确定这两个值是否与指定的关系相匹配。如果匹配,则验证通过;如果不匹配,则验证未通过,显示出错信息。 如果与常数值进行比较,则必须设置控件的ControlToCompare属性;如果与其他输入控件进行比较,则必须设置控件的ValueToCompare属性。 另外,比较验证控件不但能够进行比较,还能够检验输入数据是否是指定的数据类型。 在Visual Studio.NET工具箱中,比较验证控件的图标是。 双击或用鼠标拖动工具箱中的CompareValidator控件,可将它加入到Web窗体。重复该操作可加入多个CompareValidator控件。加入到窗体的CompareValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。
1.比较验证控件的语法格式 <asp:CompareValidator id="比较验证控件的标识符" ControlToValidate="关联输入控件的ID " ValueToCompare="要比较的常数值" ControlToCompare="比较的另一个控件的标识符" Type="数据类型" Operator="比较的运算符" ErrorMessage="出错信息" Text="出错信息" …… runat="server" > </asp:CompareValidator>
2.比较验证控件的主要属性 ID:比较验证控件的标识符。 ControlToValidate:与比较验证控件相关联的输入控件,该控件内的值就是需要验证的数据。 ControlToCompare:设置另一个输入控件的标识符。如果设置该属性,则表示与另一个输入控件进行比较,而不是与常数值比较。 ValueToCompare:设置比较的常数值。如果设置该属性,则表示与常数值比较,而不是与其他控件的值比较。 Operator:设置比较的运算符,其运算符如图7-3所示,有“相等”、“不等”、“大于”、“大于等于”、“小于”、“小于等于”和“数据类型检查”七项。当设置为 DataTypeCheck(数据类型检查)时,比较验证控件将同时忽略 ControlToCompare属性和ValueToCompare 属性,而仅检验输入控件中的值是否可以转换为Type 属性所指定的数据类型。 图7-3 比较运算符
Type:进行比较的数据类型。具体的数据类型见表7-1所示。Type:进行比较的数据类型。具体的数据类型见表7-1所示。 表7-1 比较数据类型 ErrorMessage:验证未通过时显示的出错信息。该出错信息可以显示在验证错误摘要控件上。 Text:验证未通过时显示的出错信息。
Display:比较验证控件出错信息的显示方式。当取值为None时,表示验证控件不会出现在Web页上;当取值为Static时,表示每个验证控件都会在Web页上占有一定的空间;当取值为Dynamic时,表示除非验证控件显示消息,否则不会在Web页上占用任何空间。 IsValid:指示关联的输入控件是否通过验证。true为通过,false为未通过。 EnableClientScript:指示是否启用客户端验证。true为开启,false为不开启。 动手做: [例7-2]使用比较验证控件检测密码和确认密码是否一致 【界面设计】 在Web窗体页上放置三个Label控件、三个TextBox控件、两个Button控件和一个CompareValidator控件。界面效果如图7-4所示。
CompareValidator控件的属性设置为: ControlToValidate:TextBox3(确认密码文本框) ControlToCompare:TextBox2(密码文本框) Operator:Equal Type:String ErrorMessage:(密码与确认密码不一致) 其他属性取默认值。 Web窗体(WebForm1.aspx文件)的完整代码如下: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="_6_12.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <FONT face="宋体"> <asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 40px; POSITION: absolute; TOP: 32px" runat="server" Width="64px" Height="24px">用户名</asp:Label> <asp:Button id="Button2" style="Z-INDEX: 108; LEFT: 152px; POSITION: absolute; TOP: 136px" runat="server" Width="64px" Text="返回"></asp:Button> <asp:TextBox id="TextBox3" style="Z-INDEX: 106; LEFT: 120px; POSITION: absolute; TOP: 96px" runat="server" Width="120px" TextMode="Password"></asp:TextBox> <asp:TextBox id="TextBox2" style="Z-INDEX: 105; LEFT: 120px; POSITION: absolute; TOP: 64px" runat="server" Width="120px" TextMode="Password"></asp:TextBox>
<asp:Label id="Label3" style="Z-INDEX: 103; LEFT: 40px; POSITION: absolute; TOP: 96px" runat="server" Width="64px" Height="24px">确认密码</asp:Label> <asp:Label id="Label2" style="Z-INDEX: 102; LEFT: 40px; POSITION: absolute; TOP: 64px" runat="server" Width="64px" Height="24px">密码</asp:Label> <asp:TextBox id="TextBox1" style="Z-INDEX: 104; LEFT: 120px; POSITION: absolute; TOP: 32px" runat="server" Width="120px"></asp:TextBox> <asp:Button id="Button1" style="Z-INDEX: 107; LEFT: 64px; POSITION: absolute; TOP: 136px" runat="server" Width="64px" Text="登陆"></asp:Button> <asp:CompareValidator id="CompareValidator1" style="Z-INDEX: 109; LEFT: 248px; POSITION: absolute; TOP: 96px" runat="server" Width="192px" Height="24px" ErrorMessage="(密码与确认密码不一致)" ControlToValidate="TextBox3" ControlToCompare="TextBox2"></asp:CompareValidator></FONT> </form> </body> </HTML>
点评: 本实例用于验证用户输入的密码和确认密码是否一致。通过设置CompareValidator控件的ControlToValidate和ControlToCompare属性,来完成比较密码文本框(关联输入控件)和确认密码文本框(另一个输入控件)。通过设置Operator和Type属性,确定进行字符串相等比较,即两个密码是否一致。 运行结果如图7-5所示。
7.4 范围验证控件RangeValidator 范围验证控件用于检查用户输入值是否在指定的范围内。要比较的可以是数字、字母和日期值。比较的下限和上限分别由MinimumValue和MaximumValue 属性指定。 在Visual Studio.NET工具箱中,范围验证控件的图标是。 双击或用鼠标拖动工具箱中的RangeValidator控件,可将它加入到Web窗体。重复该操作可加入多个RangeValidator控件。加入到窗体的RangeValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。
1.范围验证控件的语法格式 <asp:RangeValidator id="范围验证控件标识符" ControlToValidate="关联输入控件的ID " MinimumValue="验证范围的下限" MaximumValue="验证范围的上限" Type="数据类型" ErrorMessage="出错信息" Text="出错信息" …… runat="server" > </asp:RangeValidator> 2.范围验证控件的主要属性 ID:范围验证控件的标识符。 ControlToValidate:与范围验证控件相关联的输入控件,该控件内的值就是需要验证的数据。 MaximumValue:验证范围的上限。 MinimumValue:验证范围的下限。
Type:验证的数据类型。 ErrorMessage:验证未通过时显示的出错信息。该出错信息可以显示在验证错误摘要控件上。 Text:验证未通过时显示的出错信息。 Display:范围验证控件出错信息的显示方式。当取值为None时,表示验证控件不会出现在Web页上;当取值为Static时,表示每个验证控件都会在Web页上占有一定的空间;当取值为Dynamic时,表示除非验证控件显示消息,否则不会在Web页上占用任何空间。 IsValid:指示关联的输入控件是否通过验证。true为通过,false为未通过。 EnableClientScript:指示是否启用客户端验证。true为开启,false为不开启。 动手做: [例7-3]使用范围验证控件检测工龄是否在所给范围之内 【界面设计】 在Web窗体页上放置两个Label控件、两个TextBox控件、两个Button控件、一个RequiredValidator控件和一个RangeValidator控件。界面效果如图7-6所示。
设置RangeValidator控件的属性为: ControlToValidate:TextBox2(工龄文本框) ErrorMessage:(工龄只能在20-60之间) MinimumValue:20 MaximumValue:60 Type:Integer 其他属性取默认值。 Web窗体(WebForm1.aspx文件)的完整代码如下: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="_7_3.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <FONT face="宋体"> <asp:Label id="Label1" style="Z-INDEX: 100; LEFT: 48px; POSITION: absolute; TOP: 32px" runat="server" Width="48px" Height="22px">姓名</asp:Label> <asp:Button id="Button2" style="Z-INDEX: 108; LEFT: 160px; POSITION: absolute; TOP: 112px" runat="server" Width="56px" Text="重置"></asp:Button> <asp:TextBox id="TextBox2" style="Z-INDEX: 103; LEFT: 120px; POSITION: absolute; TOP: 72px" runat="server" Width="104px"></asp:TextBox> <asp:Label id="Label2" style="Z-INDEX: 101; LEFT: 48px; POSITION: absolute; TOP: 72px" runat="server" Width="48px" Height="22px">工龄</asp:Label>
<asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 120px; POSITION: absolute; TOP: 32px" runat="server" Width="104px"></asp:TextBox> <asp:RequiredFieldValidator id="RequiredFieldValidator1" style="Z-INDEX: 104; LEFT: 232px; POSITION: absolute; TOP: 32px" runat="server" Width="176px" Height="24px" ErrorMessage="(姓名为必录项)" ControlToValidate="TextBox1"></asp:RequiredFieldValidator> <asp:RangeValidator id="RangeValidator1" style="Z-INDEX: 105; LEFT: 232px; POSITION: absolute; TOP: 72px" runat="server" Width="200px" Height="24px" ErrorMessage="(工龄只能在20-60之间)" ControlToValidate="TextBox2" MinimumValue="20" MaximumValue="60" Type="Integer"></asp:RangeValidator> <asp:Button id="Button1" style="Z-INDEX: 107; LEFT: 72px; POSITION: absolute; TOP: 112px" runat="server" Width="56px" Text="提交"></asp:Button></FONT> </form> </body> </HTML>
点评: 本实例通过一个RangeValidator控件验证工龄必须在20-60之间。即设置其MinimumValue属性为20,MaximumValue属性为60。 运行结果如图7-7所示。 图 7-7 运行结果
[例7-4]验证在文本框中输入的日期值是否介于2004-01-01与2008-01-01之间。[例7-4]验证在文本框中输入的日期值是否介于2004-01-01与2008-01-01之间。 <asp:TextBox id="DateValue" runat="server"/> <asp:RangeValidator id="Range" ControlToValidate="DateValue" MinimumValue="2004-01-01" MaximumValue="2008-01-01"Type="Date" EnableClientScript="false" Text="超出日期范围" runat="server"/> 点评: 例子中有一个要求用户输入日期的文本框DateValue和一个范围验证控件Range。由于范围验证控件的上下限设为“2008-01-01”和“2004-01-01”,因此文本框DateValue的日期值只能在此范围之内,否则会显示出错信息“超出日期范围”。
7.5 正则表达式验证控件RegularExpresionValidator 正则表达式验证控件确保关联输入控件的输入值与某个正则表达式所定义的模式相匹配。所谓正则表达式就是由普通字符和特殊字符组成的表达式。一些常见的特殊字符见表7-2。例如,正则表达式“\d{5} | \d{8}”,表示一个表达式由5个数字或8个数字组成。可见正则表达式验证控件的关键就是构造正则表达式,即构造用户验证规则。
双击或用鼠标拖动工具箱RegularExpresionValidator控件,可将它加入到Web窗体。重复该操作可加入多个RegularExpresionValidator控件。加入到窗体的RegularExpresionValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。双击或用鼠标拖动工具箱RegularExpresionValidator控件,可将它加入到Web窗体。重复该操作可加入多个RegularExpresionValidator控件。加入到窗体的RegularExpresionValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。 1.正则表达式验证控件的语法格式 <asp:RegularExpressionValidator id="正则表达式验证控件标识符" ControlToValidate="关联输入控件的ID " ValidationExpression="正则表达式" ErrorMessage="出错信息" Text="出错信息" …… runat="server" > </asp: RegularExpressionValidator>
2.正则表达式验证控件的主要属性 ID:正则表达式验证控件的标识符。 ControlToValidate:与正则表达式验证控件相关联的输入控件,该控件内的值就是需要验证的数据。 ValidationExpression:正则表达式。选择该属性右侧的,则弹出一个如图7-8所示的正则表达式编辑器窗口。在该窗口中,一般选择“(Custom)”列表项,然后在“验证表达式”文本框中输入正则表达式。正则表达式编辑器中还带有一些常用的正则表达式,用户可以从其中直接选取。 图7-8 正则表达式编辑器
ErrorMessage:验证未通过时显示的出错信息。该出错信息可以显示在验证错误摘要控件上。ErrorMessage:验证未通过时显示的出错信息。该出错信息可以显示在验证错误摘要控件上。 Text:验证未通过时显示的出错信息。 Display:正则表达式验证控件出错信息的显示方式。当取值为None时,表示验证控件不会出现在Web页上;当取值为Static时,表示每个验证控件都会在Web页上占有一定的空间;当取值为Dynamic时,表示除非验证控件显示消息,否则不会在Web页上占用任何空间。 IsValid:指示关联的输入控件是否通过验证。true为通过,false为未通过。 EnableClientScript:指示是否启用客户端验证。true为开启,false为不开启。 动手做: [例7-5]使用正则表达式验证控件 【界面设计】 在Web窗体页上,放置两个Label控件、两个TextBox控件和两个RegularExpressionValidator控件。设计后的Web窗体效果如图7-9所示。
设置RegularExpressionValidator1控件的属性为: ValidationExpression:[a-z]\d{3}|\d{4} 。 Text:用户名输入不正确。 ControlToValidate:TextBox1(用户名) 设置RegularExpressionValidator2控件的属性为: ValidationExpression:[^AGag]\d{2}-\d{3}。 Text:密码输入不正确。 ControlToValidate:TextBox2(密码) Web窗体(WebForm1.aspx文件)的完整代码如下: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="_7_5.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <FONT face="宋体"> <asp:Label id="Label1" style="Z-INDEX: 100; LEFT: 32px; POSITION: absolute; TOP: 40px" runat="server" Width="64px" Height="24px">用户名</asp:Label> <asp:RegularExpressionValidator id="RegularExpressionValidator2" style="Z-INDEX: 108; LEFT: 216px; POSITION: absolute; TOP: 88px" runat="server" Width="144px" Height="24px" ErrorMessage="RegularExpressionValidator" ValidationExpression="[^AGag]\d{2}-\d{3}" ControlToValidate="TextBox2">(密码输入不正确)</asp:RegularExpressionValidator>
<asp:Button id="Button2" style="Z-INDEX: 106; LEFT: 136px; POSITION: absolute; TOP: 136px" runat="server" Width="64px" Text="返回"></asp:Button> <asp:TextBox id="TextBox2" style="Z-INDEX: 104; LEFT: 112px; POSITION: absolute; TOP: 80px" runat="server" Width="96px" TextMode="Password"></asp:TextBox> <asp:Label id="Label2" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 80px" runat="server" Width="64px" Height="24px">密码</asp:Label> <asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 40px" runat="server" Width="96px"></asp:TextBox> <asp:Button id="Button1" style="Z-INDEX: 105; LEFT: 48px; POSITION: absolute; TOP: 136px" runat="server" Width="64px" Text="登陆"></asp:Button> <asp:RegularExpressionValidator id="RegularExpressionValidator1" style="Z-INDEX: 107; LEFT: 216px; POSITION: absolute; TOP: 40px" runat="server" Width="160px" Height="24px" ValidationExpression="\w\d{3}|\d{4}" ControlToValidate="TextBox1">(用户名输入不正确)</asp:RegularExpressionValidator></FONT> </form> </body> </HTML>
点评: 用户名正则表达式验证控件的正则表达式为: [a-z]\d{3}|\d{4} 表示用户名可以有两种表达方式,一是以一个小写英文字母开头,后跟三个数字;二是四个数字。如a012、u123、6782等。 密码的正则表达式验证控件的正则表达式为: [^AGag]\d{2}-\d{3} 表示密码只能是以一个字母开头且不包含“AGag”字母中的一个,后跟两个数字,一个连字符,三个数字。如p49-294、w60-831等。 运行结果如图7-10所示。
7.6 自定义验证控件CustomValidator 如果以上几种验证控件无法完成验证工作,可以使用自定义验证控件。自定义验证控件比较灵活,您可以制定自定义的验证逻辑,验证逻辑一般在一个函数内实现。自定义验证控件可以进行服务器端验证,也可以进行客户端验证。如果是在服务器端进行验证,这个验证函数就是ServerValidate事件响应函数。如果在客户端进行验证,把验证函数名赋给ClientValidationFunction属性。 双击或用鼠标拖动工具箱中的CustomValidator控件,可将它加入到Web窗体。重复该操作可加入多个CustomValidator控件。加入到窗体的CustomValidator控件可用鼠标拖放到窗体的任意位置并可以改变控件的大小。