ASP.NET快速入门教程:服务器控件窗体验证(2)

使用 RangeValidator

  RangeValidator 服务器控件测试输入值是否位于给定的范围内。RangeValidator 使用三个键属性执行验证。ControlToValidate 包含要验证的值。MinimumValue 和 MaximumValue 定义有效范围的最小值和最大值。

  本例显示如何使用 RangeValidator 控件。

<%@ Page clienttarget=downlevel %>
<html>
<head>
  <script language="C#" runat="server">
    void Button1_Click(Object sender, EventArgs e) {
      rangeValInteger.Validate();
      if (rangeValInteger.IsValid) {
        lblOutput1.Text = "结果:有效!";
      } else {
        lblOutput1.Text = "结果:无效!";
      }
      rangeValDate.Validate();
      if (rangeValDate.IsValid) {
        lblOutput2.Text = "结果:有效!";
      } else {
        lblOutput2.Text = "结果:无效!";
      }
      rangeValString.Validate();
      if (rangeValString.IsValid) {
        lblOutput3.Text = "结果:有效!";
      } else {
        lblOutput3.Text = "结果:无效!";
      }
      if (Page.IsValid) {
       lblOutput.Text = "结果:页有效!";
      } else {
       lblOutput.Text = "结果:页无效!";
      }
    }
  </script>
</head>
<body>
  <h3><font face="宋体">RangeValidator 示例</font></h3>
  <p>
  <form runat="server">
   <table bgcolor="#eeeeee" cellpadding=10>
   <tr valign="top">
    <td>
      <h5><font face="宋体">要检查的值:</font></h5>
      <asp:TextBox id="txtComp1" runat="server"/>
    </td>
    <td>
      <h5><font face="宋体">数据类型:整型最小值 (1),最大值 (10)</font></h5>
    </td>
    <td>
       <asp:Label id="lblOutput1" Font-Name="宋体" Font-Size="10.5pt" runat="server" />
    </td>
   </tr>
   <tr valign="top">
    <td>
      <h5><font face="宋体">要检查的值:</font></h5>
      <asp:TextBox id="txtComp2" runat="server"/>
    </td>
    <td>
      <h5><font face="宋体">数据类型:日期最小值 (2000/1/1),最大值 (2001/1/1)</font></h5>
    </td>
    <td>
       <asp:Label id="lblOutput2" Font-Name="宋体" Font-Size="10.5pt" runat="server" />
    </td>
   </tr>
   <tr valign="top">
    <td>
      <h5><font face="宋体">要检查的值:</font></h5>
      <asp:TextBox id="txtComp3" runat="server"/>
    </td>
    <td>
      <h5><font face="宋体">数据类型:字符串最小值 (Aardvark),最大值 (Zebra)</font></h5>
    </td>
    <td>
       <asp:Label id="lblOutput3" Font-Name="宋体" Font-Size="10.5pt" runat="server" />
    </td>
   </tr>
   </table>
   <asp:Button Text="验证" ID="Button1" onclick="Button1_Click" runat="server" />
   <asp:RangeValidator
    id="rangeValInteger"
    Type="Integer"
    ControlToValidate="txtComp1"
    MaximumValue="10"
    MinimumValue="1"
    runat="server"/>
   <asp:RangeValidator
    id="rangeValDate"
    Type="Date"
    ControlToValidate="txtComp2"
    MaximumValue="2001/1/1"
    MinimumValue="2000/1/1"
    runat="server"/>
   <asp:RangeValidator
    id="rangeValString"
    Type="String"
    ControlToValidate="txtComp3"
    MaximumValue="Zebra"
    MinimumValue="Aardvark"
    runat="server"/>
   <br>
   <asp:Label id="lblOutput" Font-Name="宋体" Font-Size="10.5pt" runat="server" />
  </form>
</body>
</html>

  使用正则表达式

RegularExpressionValidator 服务器控件检查输入是否与正则表达式定义的模式匹配。该验证类型允许检查可预知的字符序列,如社会保障号、电子邮件地址、电话号码、邮政编码等中的字符序列。

  RegularExpressionValidator 使用两个键属性执行验证。ControlToValidate 包含要验证的值。ValidationExpression 包含要匹配的正则表达式。

  这些示例阐释如何使用 RegularExpressionValidator 控件。

<html>
<head>
  <script language="C#" runat=server>
    void ValidateBtn_Click(Object Src, EventArgs E) {
      if (Page.IsValid) {
       lblOutput.Text = "页有效!";
      }
      else {
       lblOutput.Text = "页无效!:-(";
      }
    }
  </script>
</head>
<body>
<h3><font face="宋体">简单的 RegularExpressionValidator 示例</font></h3>
<p>
<form runat="server">
  <table bgcolor="#eeeeee" cellpadding=10>
  <tr valign="top">
   <td colspan=3>
    <asp:Label ID="lblOutput" Text="输入 5 位数字的邮政编码" Font-Name="宋体" Font-Size="10.5pt" runat="server"/>
   </td>
  </tr>
  <tr>
   <td colspan=3>
   <font face=宋体 size=2><b>个人信息</b></font>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>邮政编码:</font>
   </td>
   <td>
    <ASP:TextBox id=TextBox1 runat=server />
   </td>
   <td>
    <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server"
      ControlToValidate="TextBox1"
      ValidationExpression="^d{5}$"
      Display="Static"
      Font-Name="verdana"
      Font-Size="10pt">
        邮政编码必须是 5 位数字
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td></td>
   <td>
    <ASP:Button text="验证" OnClick="ValidateBtn_Click" runat=server />
   </td>
   <td></td>
  </tr>
  </table>
</form>
</body>
</html>

  Validator7.aspx

 

<%@ Page clienttarget="downlevel" %>
<html>
<head>
  <script language="C#" runat=server>
    void ValidateBtn_Click(Object Sender, EventArgs E) {
      if (Page.IsValid) {
       lblOutput.Text = "页有效!";
      }
      else {
       lblOutput.Text = "页无效!:-(";
      }
    }
  </script>
</head>
<body>
<h3><font face="宋体">更多正则表达式示例</font></h3>
<p>
<form runat="server">
  <table cellpadding=10>
  <tr valign="top">
   <td colspan=3>
    <asp:Label ID="lblOutput" Text="输入每个字段的值" Font-Name="宋体" Font-Size="10.5pt" runat="server" />
   </td>
  </tr>
  <tr>
   <td colspan=3>
   <font face=宋体 size=2><b>个人信息</b></font>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>电子邮件:</font>
   </td>
   <td>
    <ASP:TextBox id=TextBox1 runat=server />
   </td>
   <td>
    <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
      ControlToValidate="TextBox1"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="10pt"
      >
      *
    </asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server"
      ControlToValidate="TextBox1"
      ValidationExpression="^[w-]+@[w-]+.(com|net|org|edu|mil)$"
      Display="Static"
      Font-Name="verdana" Font-Size="10pt">
        请输入一个有效的电子邮件地址
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>电话:</font>
   </td>
   <td>
    <ASP:TextBox id=TextBox2 runat=server />
   </td>
   <td>
    <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server"
      ControlToValidate="TextBox2"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="10pt">
      *
    </asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator id="RegularExpressionValidator2"
      ControlToValidate="TextBox2"
      ValidationExpression="(^xs*[0-9]{5}$)|(^(([1-9][0-9]{2})s)?[1-9][0-9]{2}-[0-9]{4}(sxs*[0-9]{5})?$)"
      Display="Static"
      Font-Name="verdana" Font-Size="10pt"
      runat=server>
        必须为此格式:(XXX) XXX-XXXX
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>邮政编码:</font>
   </td>
   <td>
    <ASP:TextBox id=TextBox3 runat=server />
   </td>
   <td>
    <asp:RequiredFieldValidator id="RequiredFieldValidator3" runat="server"
      ControlToValidate="TextBox3"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="10pt">
       *
    </asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator id="RegularExpressionValidator3"
      ControlToValidate="TextBox3"
      ValidationExpression="^d{5}$"
      Display="Static"
      Width="100%"
      Font-Name="verdana" Font-Size="10pt"
      runat=server>
        邮政编码必须是 5 位数字
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td></td>
   <td>
    <ASP:Button text="验证" OnClick="ValidateBtn_Click" runat=server />
   </td>
   <td></td>
  </tr>
  </table>
</form>
</body>
</html>

  执行自定义验证

CustomValidator 服务器控件调用用户定义的函数以执行标准验证程序无法处理的验证。自定义函数可以在服务器上或客户端脚本(如 JScript 或 VBScript)中执行。对于客户端自定义验证,自定义函数的名称必须在 ClientValidationFunction 属性中标识。自定义函数的形式必须为function myvalidator(source, arguments)

  请注意 source 是客户端 CustomValidator 对象,而 arguments 是具有 Value 和 IsValid 两个属性的对象。Value 属性是要验证的值而 IsValid 属性是一个布尔值,用于设置验证的返回结果。

  对于服务器端自定义验证,将自定义验证放置在验证程序的 OnServerValidate 委托中。

  下面的示例显示如何使用 CustomValidator 控件。

<html>
<head>
  <script language="C#" runat=server>
    void ValidateBtn_OnClick(object sender, EventArgs e) {
      if (Page.IsValid) {
        lblOutput.Text = "页有效!";
      }
      else {
        lblOutput.Text = "页无效!:-(";
      }
    }
    void ServerValidate (object source, ServerValidateEventArgs value) {
      // 偶数
      try {
        int num = Int32.Parse(value.Value);
        if (num%2 == 0) {
          value.IsValid = true;
          return;
        }
      }
      catch (Exception) {}
      value.IsValid = false;
    }
  </script>
</head>
<body>
<h3><font face="宋体">CustomValidator 示例</font></h3>
<p>
<form runat="server">
  <asp:Label id=lblOutput runat="server"
    Text="输入一个偶数:"
    Font-Name="宋体"
    Font-Size="10.5pt" /><br>
  <p>
  <asp:TextBox id=Text1 runat="server" />
  <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
    ControlToValidate="Text1"
    ErrorMessage="请输入一个数字"
    Display="Dynamic"
    Font-Name="verdana" Font-Size="10pt">
  </asp:RequiredFieldValidator>
  <asp:CustomValidator id="CustomValidator1" runat="server"
    ControlToValidate="Text1"
    ClientValidationFunction="ClientValidate"
    OnServerValidate="ServerValidate"
    Display="Static"
    Font-Name="verdana" Font-Size="10pt">
      不是偶数!
  </asp:CustomValidator>
  <p>
  <asp:Button text="验证" onclick="ValidateBtn_OnClick" runat="server" />
  <script language="javascript">
    function ClientValidate(source, arguments)
    {
     // 偶数?
     if (arguments.Value%2 == 0)
      arguments.IsValid = true;
     else
      arguments.IsValid = false;
    }
  </script>
</form>
</body>
</html>

  合在一起

此示例显示一个典型的注册窗体,使用在本主题中讨论的验证控件的变体。<%@ Page Language="C#" %>
<html>
<body>
  <h3><font face="宋体">登录窗体验证示例</font></h3>
  <form method=post runat=server>
  <hr width=600 size=1 noshade>
  <center>
  <asp:ValidationSummary ID="valSum" runat="server"
    HeaderText="必须在下列字段中输入有效的值:"
    DisplayMode="SingleParagraph"
    Font-Name="verdana"
    Font-Size="12"
    />
  <p>
  <!-- sign-in -->
  <table border=0 width=600>
  <tr><td colspan=3>
    <table border=0 cellpadding=0 cellspacing=0 width="100%">
    <tr><td>
      <font face=宋体,geneva,arial size=-1><b>登录信息</b></font>
    </td></tr>
    </table>
  </td></tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>电子邮件地址:</font>
   </td>
   <td>
    <asp:TextBox id=email width=200px maxlength=60 runat=server />
   </td>
   <td>
    <asp:RequiredFieldValidator id="emailReqVal"
      ControlToValidate="email"
      ErrorMessage="电子邮件。"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="12"
      runat=server>
      *
    </asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator id="emailRegexVal"
      ControlToValidate="email"
      ErrorMessage="电子邮件。"
      Display="Static"
      ValidationExpression="^[w-]+@[w-]+.(com|net|org|edu|mil)$"
      Font-Name="Arial" Font-Size="11"
      runat=server>
      不是有效的电子邮件地址。必须遵循此格式:email@host.domain。
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>密码:</font>
   </td>
   <td>
    <asp:TextBox id=passwd TextMode="Password" maxlength=20 runat=server/>
   </td>
   <td>
     <asp:RequiredFieldValidator id="passwdReqVal"
       ControlToValidate="passwd"
       ErrorMessage="密码。"
       Display="Dynamic"
       Font-Name="Verdana" Font-Size="12"
       runat=server>
       *
     </asp:RequiredFieldValidator>
     <asp:RegularExpressionValidator id="passwdRegexBal"
       ControlToValidate="passwd"
       ErrorMessage="密码。"
       ValidationExpression=".*[!@#$%^&*+;:].*"
       Display="Static"
       Font-Name="Arial" Font-Size="11"
       Width="100%" runat=server>
       密码必须包含下列字符之一: (!@#$%^&amp;*+;:)
     </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>重新输入密码:</font>
   </td>
   <td>
    <asp:TextBox id=passwd2 TextMode="Password" maxlength=20 runat=server/>
   </td>
   <td>
    <asp:RequiredFieldValidator id="passwd2ReqVal"
      ControlToValidate="passwd2"
      ErrorMessage="重新输入密码。"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="12"
      runat=server>
      *
    </asp:RequiredFieldValidator>
    <asp:CompareValidator id="CompareValidator1"
      ControlToValidate="passwd2" ControlToCompare="passwd"
      ErrorMessage="重新输入密码。"
      Display="Static"
      Font-Name="Arial" Font-Size="11"
      runat=server>
      密码字段不匹配
        </asp:CompareValidator>
   </td>
  </tr>
  <tr><td colspan=3>&nbsp;</td></tr>
  <!-- personalization information -->
  <tr><td colspan=3>
    <table border=0 cellpadding=0 cellspacing=0 width="100%">
    <tr><td><font face=宋体,geneva,arial size=-1>
      <b>个人信息</b></font>
    </td></tr>
    </table>
  </td></tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>名字:</font>
   </td>
   <td>
    <asp:TextBox id=fn maxlength=20 width=200px runat=server />
   </td>
   <td>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>姓氏:</font>
   </td>
   <td>
    <asp:TextBox id=ln maxlength=40 width=200px runat=server />
   </td>
   <td>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>地址:</font>
   </td>
   <td>
    <asp:TextBox id=address width=200px runat=server />
   </td>
   <td>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>州:</font>
   </td>
   <td>
    <asp:TextBox id=state width=30px maxlength=2 runat=server />&nbsp;
    <font face=宋体 size=2>邮政编码:</font>&nbsp;
    <ASP:TextBox id=zip width=60px maxlength=5 runat=server />
   </td>
   <td>
    <asp:RegularExpressionValidator id="RegularExpressionValidator1"
      ControlToValidate="zip"
      ErrorMessage="邮政编码。"
      ValidationExpression="^d{5}$"
      Display="Static"
      Font-Name="Arial" Font-Size="11"
      runat=server>
      邮政编码必须是 5 位数字
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>电话:</font>
   </td>
   <td>
    <asp:TextBox id="phone" maxlength=20 runat="server" />
   </td>
   <td>
    <asp:RequiredFieldValidator id="phoneReqVal"
      ControlToValidate="phone"
      ErrorMessage="电话。"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="12"
      runat=server>
      *
    </asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator id="phoneRegexVal"
      ControlToValidate="phone"
      ErrorMessage="电话。"
      ValidationExpression="(^xs*[0-9]{5}$)|(^(([1-9][0-9]{2})s)?[1-9][0-9]{2}-[0-9]{4}(sxs*[0-9]{5})?$)"
      Display="Static"
      Font-Name="Arial" Font-Size="11"
      runat=server>
      必须为此格式:(XXX) XXX-XXXX
    </asp:RegularExpressionValidator>
   </td>
  </tr>
  <tr><td colspan=3>&nbsp;</td></tr>
  <!-- Credit Card Info -->
  <tr>
   <td colspan=3>
   <font face=宋体 size=2><b>信用卡信息</b></font>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>卡类型:</font>
   </td>
   <td>
    <ASP:RadioButtonList id=ccType Font-Name="Arial" RepeatLayout="Flow" runat=server>
      <asp:ListItem>MasterCard</asp:ListItem>
      <asp:ListItem>Visa</asp:ListItem>
    </ASP:RadioButtonList>
   </td>
   <td>
    <asp:RequiredFieldValidator id="ccTypeReqVal"
      ControlToValidate="ccType"
      ErrorMessage="卡类型。"
      Display="Static"
      InitialValue=""
      Font-Name="Verdana" Font-Size="12"
      runat=server>
      *
    </asp:RequiredFieldValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>卡号:</font>
   </td>
   <td>
    <ASP:TextBox id="ccNum" runat=server />
   </td>
   <td>
    <asp:RequiredFieldValidator id="ccNumReqVal"
      ControlToValidate="ccNum"
      ErrorMessage="卡号。"
      Display="Dynamic"
      Font-Name="Verdana" Font-Size="12"
      runat=server>
      *
    </asp:RequiredFieldValidator>
    <asp:CustomValidator id="ccNumCustVal"
      ControlToValidate="ccNum"
      ErrorMessage="卡号。"
      clientvalidationfunction="ccClientValidate"
      Display="Static"
      Font-Name="Arial" Font-Size="11"
      runat=server>
      不是有效的信用卡号。必须包含 16 位数字。
    </asp:CustomValidator>
   </td>
  </tr>
  <tr>
   <td align=right>
    <font face=宋体 size=2>到期日期:</font>
   </td>
   <td>
    <ASP:DropDownList id=expDate runat=server>
      <asp:ListItem></asp:ListItem>
      <asp:ListItem >06/00</asp:ListItem>
      <asp:ListItem >07/00</asp:ListItem>
      <asp:ListItem >08/00</asp:ListItem>
      <asp:ListItem >09/00</asp:ListItem>
      <asp:ListItem >10/00</asp:ListItem>
      <asp:ListItem >11/00</asp:ListItem>
      <asp:ListItem >01/01</asp:ListItem>
      <asp:ListItem >02/01</asp:ListItem>
      <asp:ListItem >03/01</asp:ListItem>
      <asp:ListItem >04/01</asp:ListItem>
      <asp:ListItem >05/01</asp:ListItem>
      <asp:ListItem >06/01</asp:ListItem>
      <asp:ListItem >07/01</asp:ListItem>
      <asp:ListItem >08/01</asp:ListItem>
      <asp:ListItem >09/01</asp:ListItem>
      <asp:ListItem >10/01</asp:ListItem>
      <asp:ListItem >11/01</asp:ListItem>
      <asp:ListItem >12/01</asp:ListItem>
    </ASP:DropDownList>
   </td>
   <td>
    <asp:RequiredFieldValidator id="expDateReqVal"
     ControlToValidate="expDate"
     ErrorMessage="到期日期。"
     Display="Static"
     InitialValue=""
     Font-Name="Verdana" Font-Size="12"
     runat=server>
     *
    </asp:RequiredFieldValidator>
   </td>
  </tr>
  </table>
  <p>
  <input runat="server" type=submit value="登录">
  <p>
  <hr width=600 size=1 noshade>
  <script language="javascript">
    function ccClientValidate(source, arguments)
    {
      var cc = arguments.Value;
      var ccSansSpace;
      var i, digits, total;
      // 只是示例。不是实际的信用卡算法。
      // 基于 ANSI X4.13,使用 LUHN 规则(也称为模 10 算法)
      // 执行生成和/或验证,并验证一些信用卡号的正确性。
      // 获取数字,去除所有的非数字字符,应剩余 16 位数字
      ccSansSpace = cc.replace(/D/g, "");
      if(ccSansSpace.length != 16) {
        arguments.IsValid = false;
        return;  // 无效的信用卡号
      }
      // 转换为数字数组
      digits = new Array(16);
      for(i=0; i<16; i++)
        digits[i] = Number(ccSansSpace.charAt(i));
      // 每隔一位,将数字加倍然后将数字相加
      for(i=0; i<16; i+=2) {
        digits[i] *= 2;
        if(digits[i] > 9)  digits[i] -= 9;
      }
      // 将数字相加
      total = 0;
      for(i=0; i<16; i++)   total += digits[i];
      // 结果
      if( total % 10 == 0 )  {
        arguments.IsValid = true;
        return;  // 有效的信用卡号
      }
      else {
        arguments.IsValid = false;
        return;  // 无效的信用卡号
      }
    }
  </script>
</form>
</center>
</body>
</html>

  本节小结

 

  验证程序控件可用于验证任何 Web 窗体页上的输入。

  在给定的输入字段中可以使用多个控件。

  除服务器验证外,还可使用客户端验证以提高窗体可用性。

  CustomValidator 控件使用户可以定义自定义验证判据。

  阅读更多ASP.NET快速入门教程,请点这里访问 "ASP.NET快速入门教程目录 "

posted on 2009-05-01 10:28  冉元胜  阅读(274)  评论(0编辑  收藏  举报

导航