【引言】
验证可以有客户端和服务器段的验证。客户端的验证主要是用JavaScript脚本,效率高,响应时间短,但安全性不好;服务器段的验证主要是用C#语言在后台验证,安全高了,但每次提交都要把数据传到后台,太慢。
ASP.NET不仅把窗体的验证作为服务器控件引入,还使这些控件智能化。如果浏览器支持JavaScript,而ASP.NET可以发送JavaScript,验证就在客户端进行;如果客户机不支持用于验证的JavaScript,这些JavaScript就被忽略,验证就在服务器上进行。
【验证控件的种类及作用】
验证类型 | 控件 | 说明 |
必填字段验证 | RequiredFieldValidator | 确保用户不会跳过某一项输入。 |
比较验证 | CompareValidator | 将用户输入与一个常数值或者 另一个控件或特定数据类型的值 进行比较(使用小于、等于或大 于等比较运算符)。 |
范围验证 | RangeValidator | 检查用户的输入是否在指定的 上下限内。可以检查数字对、 字母对和日期对限定的范围。 |
正则表达式验证 | RegularExpressionValidator | 检查项与正则表达式定义的模 式是否匹配。此类验证使您能 够检查可预知的字符序列,如 电子邮件地址、电话号码、邮政 编码等内容中的字符序列。 |
自定义验证 | CustomValidator | 使用您自己编写的验证逻辑检查 用户输入。此类验证使您能够检 查在运行时派生的值。 |
验证总结 | validationsummary | 以摘要的形式显示页上所有验 证程序的验证错误 |
1、RequiredFieldValidator控件
RequiredFieldValidator 控件用于使输入控件成为一个必选字段。
通过该控件,如果输入值的初始值未改变,那么验证将失败。默认地,初始值是空字符串 ("")。
注释:输入值的开头和结尾的空格将在验证前被删除。
注释:InitialValue 不为输入控件设置默认值。它指示了您不希望用户在输入控件中输入的值。
属性 | 描述 |
BackColor | RangeValidator 控件的背景颜色 |
ControlToValidate | 要验证的控件的 id |
Display | 验证控件的显示行为。 合法的值有: · None - 验证消息从不内联显示。 · Static - 在页面布局中分配用于显示验证消息的空间。 · Dynamic - 如果验证失败,将用于显示验证消息的空间动态添加到页面。 |
EnableClientScript | 布尔值,规定是否启用客户端验证。 |
Enabled | 布尔值,规定是否启用验证控件。 |
ErrorMessage | 当验证失败时,在 ValidationSummary 控件中显示的文本。 注释:如果未设置 Text 属性,文本也会显示在该验证控件中。 |
ForeColor | 该控件的前景色。 |
id | 控件的唯一 id。 |
InitialValue | 规定输入控件的初始值(开始值)。默认是 ""。 |
IsValid | 布尔值,指示关联的输入控件是否通过验证。 |
runat | 规定该控件是一个服务器控件。必须设置为 "server"。 |
Text | 当验证失败时显示的消息。 |
<html>
<body>
<form runat="server">
名称:<asp:TextBox id="name" runat="server" />
<br />
年龄:<asp:TextBox id="age" runat="server" />
<br /><br />
<asp:Button runat="server" Text="提交" />
<br /><br />
<asp:RequiredFieldValidator
ControlToValidate="name"
Text="name 姓名是必填的!"
runat="server" />
</form>
</body>
</html>
2、CompareValidator(比较验证)控件
CompareValidator 控件用于将由用户输入到输入控件的值与输入到其他输入控件的值或常数值进行比较。
注释:如果输入控件为空,则不会调用任何验证函数,并且验证将成功。使用 RequiredFieldValidator 控件使字段成为必选字段。
属性 | 描述 |
BackColor | CompareValidator 控件的背景颜色。 |
ControlToCompare | 要与所验证的输入控件进行比较的输入控件。 |
ControlToValidate | 要验证的输入控件的 ID。 |
Display | 验证控件中错误信息的显示行为。 合法值是: · None 验证消息从不内联显示。 · Static 在页面布局中分配用于显示验证消息的空间。 · Dynamic 如果验证失败,将用于显示验证消息的空间动态添加到页面。 |
EnableClientScript | 布尔值,规定是否启用客户端验证。 |
Enabled | 布尔值,规定是否启用验证控件。 |
ErrorMessage | 当验证失败时在 ValidationSummary 控件中显示的文本。 注释:如果未设置 Text 属性,此文本将显示在验证控件中。 |
ForeColor | 控件的前景颜色。 |
id | 控件的唯一 ID。 |
IsValid | 布尔值,指示由 ControlToValidate 指定的输入控件是否通过验证。 |
Operator | 要执行的比较操作的类型。 运算符是: · Equal · GreaterThan · GreaterThanEqual · LessThan · LessThanEqual · NotEqual · DataTypeCheck |
runat | 规定控件是服务器控件。必须设置为 "server"。 |
Text | 当验证失败时显示的消息。 |
Type | 规定要对比的值的数据类型。 类型有: · Currency · Date · Double · Integer · String |
ValueToCompare | 一个常数值,该值要与由用户输入到所验证的输入控件中的值进行比较。 |
3、RangeValidator(范围验证)控件
验证输入是否在一定范围,范围用MaximumValue和MinimunVlaue来确定。
RangeValidator控件标准代码如下:
<asp:RangeValidator ID="Vaidator_ID" runat="Server" ControlToValidate="要验证的控件ID"
Type="String|Integer|Double|DateTime|Currency" MinimumValue="最小值" MaximumValue="最大值"
ErrorMessage="错误信息" Display="Static|Dymatic|None">
占位符
</asp:RangeValidator>
在以上代码中:用MinimumValue和MaximumValue来界定控件输入值得范围,用type来定义控件输入值的类型。
4、RegularExpresionValidator(正则表达式)控件
代码:
<asp:RegularExpressionValidator ID="Validator_ID" runat="Server" ControlToValidate="要验证控件名"
ValidationExpression="正则表达式" ErrorMessage="错误信息" Display="Static|Dymatic|None">
占位符
</asp:RegularExpressionValidator>
在以上标准代码中,ValidationExpression是重点,现在来看看它的构造:
在ValidationExpression中,不同的字符表示不同的含义:
星号"*":表示和其他表达式一起,表示容易组合;
方括号“[ ]”:用与定义可接受的字符。[abc123] 表示控件只能接受 a,b,c,1,2,3 这6个字符;[A-Z]表示任意大写字母;
反集合符号“ ^ ”:用于定义不可以接受的字符。[^a-h] 表示控件除了 a 到 h 8个字符外,都可以接受;
花括号“{ }”:定义必须输入的字符个数。{6}表示只能输入6个字符 ; {6,}表示必须输入6个以上,无上限 ; {2,6} 表示必须输入2至6个字符;但是花括号必须放在方括号后面,例如 [a-z]{4} 表示必须输入 4位a和z之间的任意字符。
小圆点“ . ”:用于代表任意字符。 例如 .{3,6}表示接受3到6个任意字符。
竖线“ | ” :用于表示 “或”的逻辑符号。例如 [1-9]{3,6}|[A-Za-z]{3} 表示可以接受 3到6个数字或者 3个字母。 (大小写都可以区别的哦)
小括号“()” :用于分块,与数字运算中的小括号作用类似。
斜线“ \ ” :若希望可以接受的字符包含上述特殊字符。例如 \([0-9]{3}\),表示输入格式为“(xxx)”的电话区号。
注意,在以上表达式中,引号不包括在内;
举例:正则表达式:".*[A-Z]"表示数字开头的任意字符组合其后接一个大写字母。
5、CustomValidator(自定义验证)控件
实例:在本例中,我们在 .aspx 文件中声明了两个 Label 控件,一个 TextBox 控件,一个 Button 控件,以及一个 CustomValidator 控件。user() 函数可检测输入值的长度。如果长度小于 8 或大于 16,将在 CustomValidator 控件中显示文本 "用户名必须介于 8 到 16 个字符之间!"。
<script runat="server">
Sub user(source As object,args As ServerValidateEventArgs)
if len(args.Value)<8 or len(args.Value)>16 then
args.IsValid=false
else
args.IsValid=true
end if
End Sub
</script>
<html>
<body>
<form runat="server">
<asp:Label runat="server" Text="请输入用户名:" />
<asp:TextBox id="txt1" runat="server" />
<asp:Button Text="提交" runat="server"/>
<br />
<asp:Label id="mess" runat="server"/>
<br />
<asp:CustomValidator
ControlToValidate="txt1"
OnServerValidate="user"
Text="用户名必须介于 8 到 16 个字符之间!"
runat="server"/>
</form>
</body>
</html>
【补充】
可以通过Page的属性ClientTarget可以设置所有的验证控件是否会在客户端验证。只要将这个属性设置为UpLevel就可以了,DownLevel下,所有的验证都只会在服务器上执行了。默认情况下,大多数浏览器都是会在客户端验证的,所以我并不知道它的这个属性是不是默认UpLevel了。当然,如果要为单独的一个或几个验证控件设置的话,那么还是使用原先的EnableClientScript。
另外还增加了一个SetFoucsOnError属性。就是当出错的时候将焦点移到控件上。这样就不会使用户在点击了按钮之后因为没看到错误提示而在那发愣了。另外一个就是CustomValidator增加了ValidateEmptyText属性来让用户自定义验证控件在值为空时也验证。