ASP.NET使用RegularExpressionValidator控件(数据输入格式验证)
RegularExpressionValidator控件用于验证输入表单字段的值是否与某个正则表达式所定义的模式相匹配。相匹配时,则不会显示验证错误信息。
正则表达式主要用于表示字符串的模式,比如身份证号码、电子邮件地址、电话号码、邮政编码、日期、货币数和产品编码等字符序列,都可以使用正则表达式来定义一种模式,因此都需要使用RegularExpressionValidator控件来验证。
RegularExpressionValidator控件允许有多种有效模式,每个有效模式使用“|”字符来进行分隔。预定义的模式需要使用正则表达式定义。
RegularExpressionValidator控件如下图所示:
RegularExpressionValidator控件在ASP.NET工具箱中的位置
RegularExpressionValidator控件的属性
将工具箱中的RegularExpressionValidator控件拖动到aspx页面中,或者在页面中选择一个RegularExpressionValidator控件时,RegularExpressionValidator控件的属性就显示在了“属性”窗口中。如下图所示:
在ASP.NET“属性”窗口中显示RegularExpressionValidator控件的属性
在“属性”窗口中点击任意一个属性时,都会在窗口底部显示出对该属性的解释。
RegularExpressionValidator控件的属性与RequiredFieldValidator控件的属性大致相同。下面只对RegularExpressionValidator控件的ValidationExpression属性进行具体介绍:
ValidationExpression属性用于指定验证条件的正则表达式。常用的正则表达式字符及其含义如下表所示:
正则表达式字符 含义
[......] 匹配括号中的任何一个字符
[^......] 匹配不在括号中的任何一个字符
\w 匹配任何一个字符(a~z、A~Z和0~9)
\W 匹配任何一个空白字符
\s 匹配任何一个非空白字符
\S 与任何非单词字符匹配
\d 匹配任何一个数字(0~9)
\D 匹配任何一个非数字(^0~9)
[\b] 匹配一个退格键字母
{n,m} 最少匹配前面表达式n次,最大为m次
{n,} 最少匹配前面表达式n次
{n} 恰好匹配前面表达式n次
? 匹配前面表达式0或1次{0,1}
+ 至少匹配前面表达式1次{1,}
* 至少匹配前面表达式0次{0,}
| 匹配前面表达式或后面表达式
(...) 在单元中组合项目
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配字符边界
\B 匹配非字符边界的某个位置
常用的正则表达式举例如下:
1. 验证电子邮件:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
或者
\S+@\S+\. \S+
\w:必须以一个a-z,A-Z,0-9或者这些字符中的任意一个字符开头。
([-+.]\w+)*:允许0个或者多个-+.a或-+.aa这样的字符,也就是说,邮件的地址可以是:
a-a
a+aa
a.aaa
这种形式作为开头。
@:Email必须的字符。
([-.]\w+)*:允许出现0个或者多个-.加一个字符或者多个字符的情况。
根据这个正则表达式,邮箱可以是下面的格式:
www-baike369@163.com
www+baike369@163.com
www.baike369@163.com
不过,我们经常使用的邮箱是不允许出现-+.的。
2. 验证网址:
HTTP://\S+\. \S+
3. 验证邮政编码:
\d{6}
4. 表示0~9这10个数字:
[0-9]
5. 表示任意个数字:
\d*
6. 表示中国大陆的固定电话号码:
\d{3,4}-\d{7,8}
7. 验证由两位数字、一个连字符再加5位数字组成的ID号:
\d{2}-\d{5}
8. 匹配HTML标记:
<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>
实例
在ShowRegularExpressionValidator.aspx网页中,使用RegularExpressionValidator控件来验证电子邮件地址。程序代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowRegularExpressionValidator.aspx.cs" Inherits="ShowRegularExpressionValidator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>ASP.NET使用RegularExpressionValidator控件(数据输入格式验证)-www.baike369.com</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label
ID="Label1"
runat="server"
Text="Email地址:"
AssociatedControlID="TextBox1">
</asp:Label>
<asp:TextBox
ID="TextBox1"
runat="server">
</asp:TextBox>
<asp:RegularExpressionValidator
ID="RegularExpressionValidator1"
runat="server"
ControlToValidate="TextBox1"
Text="(无效的邮件格式)"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>
<br /><br />
<asp:Button
ID="Button1"
runat="server"
Text="提交" />
</div>
</form>
</body>
</html>
执行结果如下:
ASP.NET使用RegularExpressionValidator控件(数据输入格式验证)的操作效果
上面的程序代码中,将正则表达式:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
赋值给RegularExpressionValidator控件的ValidationExpression属性。
该模式匹配简单的电子邮件地址。\w表达式表示任何非空白字符(空白字符包括空格、制表符和换行),因此这个正则表达式模糊匹配包含了非空白字符的电子邮件地址,接下来是一个@符号,接下来是非空白字符,接下来是句点,接下来又是非空白字符。
RegularExpressionValidator控件不会验证没有值的表单字段。要使表单字段必填,必须为表单字段关联RequiredFieldValidator控件。
提示
在网页中选择RegularExpressionValidator控件,然后在“属性”窗口中选择ValidationExpression属性,再点击该属性右侧的按钮按钮,可以打开“正则表达式编辑器”窗口,窗口中有一些标准的表达式,可以根据需要挑选使用。