二篇 Web Form <html> 当我们在三个文本框中分别输入要验证的值,最大值,和最小值,然后按下验证按钮,页面 上将显示判断的结果。 在本例中我们只能比较 Integer和 string的值,当然,我们也可以增加数据类型,如 double 型,foat型,date型, currency型等 结果运行如下: 回区 文件)编辑)查看①)收藏()工具〔r)帮助0 Rangevalidator控件演示 输入要验证的值 数据类:最小值: 最大值: 结果不正确! N Internet 4. RegularExpression Validator控件 我们在制作网站的时候,尤其是各种电子商务网站首先都会让用户填写一些表格来获取 注册用户的各种信息,因为用户有可能输入各式各样的信息而有些不符合要求的数据会给我 们的后端ASP处理程序带来不必要的麻烦甚至导致网站出现一些安全问题。因此我们在将 这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验以便 后面的程序可以安全顺利的执行 使用 RegularExpression Validator服务器控件,可以用来检查我们输入的信息是否和我们 的自定义的表达式一致。比方说用它可以检查emal地址,电话号码等合法性 在讲述 Regular Expression Validator服务器控件使用之前,我们先来了解一下正则表达式 ( Regular Expression)的来源 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。ware McCulloch和 Walter Pitts这两位神经生理学家研究出一种数学方式来描述这些神经网络 1956年,一位叫 Stephen Kleene的美国数学家在 McCulloch和Pits早期工作的基础上 发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式 就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。随后 发现可以将这一工作应用于使用 Ken Thompson的计算搜索算法的一些早期研究,Ken hampson是Unix的主要发明人。正则表达式的第一个实用应用程序就是Unix中的qed 编辑器。如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基 于文本的编辑器和搜索工具中的一个重要部分。 其实,正则表达式( Regular Expression)是一个正则表达式就是由普通字符(例如字符 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹 第21页共132页
第二篇 Web Form 第 21 页 共 132 页 </html> 当我们在三个文本框中分别输入要验证的值,最大值,和最小值,然后按下验证按钮,页面 上将显示判断的结果。 在本例中我们只能比较 integer 和 string 的值,当然,我们也可以增加数据类型,如 double 型,float 型,date 型,currency 型等。 结果运行如下: 4. RegularExpressionValidator 控件 我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取 注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我 们的后端 ASP 处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题。因此我们在将 这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便 后面的程序可以安全顺利的执行。 使用 RegularExpressionValidator 服务器控件,可以用来检查我们输入的信息是否和我们 的自定义的表达式一致。比方说用它可以检查 e-mail 地址,电话号码等合法性。 在讲述 RegularExpressionValidator 服务器控件使用之前,我们先来了解一下正则表达式 (RegularExpression)的来源: 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上, 发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式 就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。随后, 发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基 于文本的编辑器和搜索工具中的一个重要部分。 其实,正则表达式(RegularExpression)是一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹
二篇 Web Form 配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行 匹配。 使用正则表达式,就可以: 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是 否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 2.替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其 删除,或者替换为别的文字 3.根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特 定文字。 例如,如果需要搜索整个web站点来删除某些过时的材料并替换某些HIML格式化 标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料 或HIML格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改 的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则 表达式来査找并替换那些需要替换的标记。 另一个说明正则表达式非常有用的示例是一种其字符串处理能力还不为人所知的语言 Ⅴ SCript是Ⅴ isual Basic的一个子集,具有丰富的字符串处理功能。与C类似的 Visual Basic Scripting Edition则没有这一能力。正则表达式给Ⅴ isual Basic Scripting Edition的字符 串处理能力带来了明显改善。不过,可能还是在 VBScript中使用正则表达式的效率更高, 它允许在单个表达式中执行多个字符串操作 正是由于“正则表达式”的强大功能,才使得微软慢慢将正则表达式对象移植到了视窗 系统上面。在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字 符和序列,并给出了实例 字符描述:\:将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配 与换行符匹配。序列"W"与"匹配,"("与""匹配 :匹配输入的开始位置 $:匹配输入的结尾。 匹配前一个字符零次或几次。例如,"zo*可以匹配"z"、"zoo"。 +:匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z" ?:匹配前一个字符零次或一次。例如,"a?ve?"可以匹配" never"中的"ve" :匹配换行符以外的任何字符 ( pattern)与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches集合中 使用tem[o].[n]取得。如果要匹配括号字符(和),可使用"Y"或") xy:匹配x或y。例如"foo"可匹配"z"或"food"。"(zood"匹配"zoo"或 {n}:n为非负的整数。匹配恰好n次。例如,"o{2}”不能与"Bob中的"o"匹配, 但是可以与"food中的前两个o匹配 {n,}:n为非负的整数。匹配至少n次。例如,"o{2,}"不匹配"Bob"中的"o”,但是匹配 foooood中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。 {n,m}:m和n为非负的整数。匹配至少n次,至多m次。例如,"o{1,3}"匹配 " fooooood°申前三个o。"o{0,1}"等价于"o?"。 xyz]:一个字符集。与括号中字符的其中之一匹配。例如,"abc"匹配" plain"中的"a" ^xyz]:一个否定的字符集。匹配不在此括号中的任何字符。例如,"abc"可以匹配 " plain"中的"p az]:表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a 第22页共132页
第二篇 Web Form 第 22 页 共 132 页 配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行 匹配。 使用正则表达式,就可以: 1. 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是 否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 2. 替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其 删除,或者替换为别的文字。 3. 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特 定文字。 例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些 HTML 格式化 标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料 或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改 的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则 表达式来查找并替换那些需要替换的标记。 另一个说明正则表达式非常有用的示例是一种其字符串处理能力还不为人所知的语言。 VBScript 是 Visual Basic 的一个子集,具有丰富的字符串处理功能。与 C 类似的 Visual Basic Scripting Edition 则没有这一能力。正则表达式给 Visual Basic Scripting Edition 的字符 串处理能力带来了明显改善。不过,可能还是在 VBScript 中使用正则表达式的效率更高, 它允许在单个表达式中执行多个字符串操作。 正是由于“正则表达式”的强大功能,才使得微软慢慢将正则表达式对象移植到了视窗 系统上面。在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字 符和序列,并给出了实例。 字符描述: \:将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n" 与换行符匹配。序列"\\"与"\"匹配,"\("与"("匹配。 ^ :匹配输入的开始位置。 $ :匹配输入的结尾。 * :匹配前一个字符零次或几次。例如,"zo*"可以匹配"z"、"zoo"。 + :匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。 ? :匹配前一个字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。 .:匹配换行符以外的任何字符。 (pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中 使用 Item [0]...[n]取得。如果要匹配括号字符(和 ),可使用"\(" 或 "\)"。 x|y:匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zoo" 或 "food"。 {n}:n 为非负的整数。匹配恰好 n 次。例如,"o{2}" 不能与 "Bob 中的 "o" 匹配, 但是可以与"foooood"中的前两个 o 匹配。 {n,} :n 为非负的整数。匹配至少 n 次。例如,"o{2,}"不匹配"Bob"中的"o",但是匹配 "foooood"中所有的 o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。 {n,m} :m 和 n 为非负的整数。匹配至少 n 次,至多 m 次。例如,"o{1,3}" 匹配 "fooooood"中前三个 o。"o{0,1}"等价于"o?"。 [xyz] :一个字符集。与括号中字符的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。 [^xyz] :一个否定的字符集。匹配不在此括号中的任何字符。例如,"[^abc]" 可以匹配 "plain"中的"p". [a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a
二篇 Web Form 与"z"之间的任何一个小写字母字符 ^m-z]:否定的字符区间。与不在指定区间内的字符匹配。例如,"[m-z"与不在"m 到"z"之间的任何字符匹配 b:与单词的边界匹配,即单词与空格之间的位置。例如,"ertb"与" never"中的 匹配,但是不匹配"verb"中的"er"。 B:与非单词边界匹配。"earB"与" never early"中的"ear"匹配 ld:与一个数字字符匹配。等价于[0-9 D:与非数字的字符匹配。等价于[^0-9 f:与分页符匹配 n:与换行符字符匹配。 Ir:与回车字符匹配 s:与任何白字符匹配,包括空格、制表符、分页符等。等价于"[ f\nrtl" S:与任何非空白的字符匹配。等价于"^ \fnIrItvI" t:与制表符匹配。 lv:与垂直制表符匹配 w:与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9J"。 W:与任何非单词字符匹配。等价于[^A-Za-z0-9J"。 num:匹配num个,其中num为一个正整数。引用回到记住的匹配。例如,()1 匹配两个连续的相同的字符 Ⅶn:匹配n,其中n是一个八进制换码值。八进制换码值必须是1,2或3个数字长。 例如,"11”和"W01"都与一个制表符匹配。"001”等价于"001”与"1"。八进制换 码值不得超过256。否则,只有前两个字符被视为表达式的一部分。允许在正则表达式中使 用ASCI码 kxn:匹配n,其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。 例如,"k41"匹配"A"。"x041"等价于"x04"和"1"。允许在正则表达式中使用 ASCII码 Regular Expression Validator有两种主要的属性来进行有效性验证。 ControlTo validate包 含了一个值进行验证。如取出文本框中的值。如 ControlTo validate=" TextBox Validation Expression包含了一个正则表达式进行验证 好了,有了上面的叙述,我们就举个例子来说明正则表达式。比如,我们想要对用户输 入的电子邮件进行校验,那么,什么样的数据才算是一个合法的电子邮件呢?我可以这样输 入:test(@yesky.com,当然我也会这样输入:xxx@yyy.com.cn,但是这样的输入就是非法的 xx@acom.cn或者@XXX.com.cn,等等,所以我们得出一个合法的电子邮件地址至少应当 满足以下几个条件 1.必须包含一个并且只有一个符号“a” 2.第一个字符不得是“@”或者“” 3.不允许出现“@”或者@ 4.结尾不得是字符“@”或者 所以根据以上的原则和上面表中的语法,我们很容易的就可以得到需要的模板如下: "Aw+(-w+)(.Ww)+@[A-Za-z0-9]+(-)[A-Za-0-9]+)*\[A-Za-z0-9+$" 请看 validata6.aspx的内容: <!-源文件; form\web页面简介 -validate6aspx-> <head> 第23页共132页
第二篇 Web Form 第 23 页 共 132 页 与"z"之间的任何一个小写字母字符。 [^m-z] :否定的字符区间。与不在指定区间内的字符匹配。例如,"[m-z]"与不在"m" 到"z"之间的任何字符匹配。 \b :与单词的边界匹配,即单词与空格之间的位置。例如,"er\b" 与"never"中的"er" 匹配,但是不匹配"verb"中的"er"。 \B :与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。 \d :与一个数字字符匹配。等价于[0-9]。 \D :与非数字的字符匹配。等价于[^0-9]。 \f :与分页符匹配。 \n :与换行符字符匹配。 \r :与回车字符匹配。 \s :与任何白字符匹配,包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"。 \S :与任何非空白的字符匹配。等价于"[^ \f\n\r\t\v]"。 \t :与制表符匹配。 \v :与垂直制表符匹配。 \w :与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"。 \W :与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。 \num :匹配 num 个,其中 num 为一个正整数。引用回到记住的匹配。例如,"(.)\1" 匹配两个连续的相同的字符。 \n:匹配 n,其中 n 是一个八进制换码值。八进制换码值必须是 1, 2 或 3 个数字长。 例如,"\11" 和 "\011" 都与一个制表符匹配。"\0011"等价于"\001" 与 "1"。八进制换 码值不得超过 256。否则,只有前两个字符被视为表达式的一部分。允许在正则表达式中使 用 ASCII 码。 \xn:匹配 n,其中 n 是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。 例如,"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCII 码。 RegularExpressionValidator 有两种主要的属性来进行有效性验证。ControlToValidate 包 含 了 一 个 值 进 行 验 证 。 如 取 出 文 本 框 中 的 值 。 如 ControlToValidate="TextBox1" ValidationExpression 包含了一个正则表达式进行验证。 好了,有了上面的叙述,我们就举个例子来说明正则表达式。比如,我们想要对用户输 入的电子邮件进行校验,那么,什么样的数据才算是一个合法的电子邮件呢?我可以这样输 入:test@yesky.com,当然我也会这样输入:xxx@yyy.com.cn,但是这样的输入就是非法的: xxx@@com.cn 或者@xxx.com.cn,等等,所以我们得出一个合法的电子邮件地址至少应当 满足以下几个条件: 1. 必须包含一个并且只有一个符号“@” 2. 第一个字符不得是“@”或者“.” 3. 不允许出现“@.”或者.@ 4. 结尾不得是字符“@”或者“.” 所以根据以上的原则和上面表中的语法,我们很容易的就可以得到需要的模板如下:"= "^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$" 请看 validata6.aspx 的内容: <!--源文件:form\web 页面简介\validate6.aspx--> </head> <body>
二篇 Web Form < center><h3>< font face=" Verdana">使用正则表达式验证<font></h3></ center> <form runat="serve ttle使用正则表达式验证</ttle <table bgcolor="#eeeeee"cellpadding=10> < asp: Label ID=" IblOutput"iext="输入E-mail地址" Font-Name=" Verdana Font-Size="1Opt"runat="server"P> </td> <td align=right> <font face= Verdana size=2>E-mail </font>> <ASP: Text Box id=Text Box l runat=server /> casp: Regular Expression Validator id="Regular Expression Validator I"runat="server ControlTo validate="Text Box1 Validation Expression Display="Static rdan Font-Size="10pt"> 请输入有效的Emai地址! </asp: Regular Expression Validator> <td> < ASP: Button text="验证” OnClick=" ValidateBtn Click" runat= server </html> 第24页共132页
第二篇 Web Form 第 24 页 共 132 页 <center><h3><font face="Verdana">使用正则表达式验证</font></h3></center> <p> <form runat="server"> <center> <title>使用正则表达式验证</title> <table bgcolor="#eeeeee" cellpadding=10> <tr valign="top"> <td colspan=3> <asp:Label ID="lblOutput" Text=" 输 入 E-mail 地 址 " Font-Name="Verdana" Font-Size="10pt" runat="server"/> </td> </tr> <tr> <td align=right> <font face=Verdana size=2>E-mail:</font> </td> <td> <ASP:TextBox id=TextBox1 runat=server /> </td> <td> <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ValidationExpression="^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+ $" Display="Static" Font-Name="verdana" Font-Size="10pt"> 请输入有效的 E-mail 地址! </asp:RegularExpressionValidator> </td> </tr> <tr> <td></td> <td> <ASP:Button text="验证" OnClick="ValidateBtn_Click" runat=server /> </td> <td></td> </tr> </table> </center> </form> </body> </html>
这样,我们只要定制不同的模板,就可以实现对不同数据的合法性校验了。所以,正则 表达式对象中最重要的属性就是:“ Pattern”属性,只要真正掌握了这个属性,才可以自由的运 用正则表达式对象来为我们的数据校验进行服务 程序的运行效果如图: 使用正则表达式捡证 件①)编辑¢)查看⑩收藏)工具〔)帮助⑩ 使用正则表达式验证 输入E-ma地址 请输入有效的E-mai地址! 验证 包完成 通过上面的介绍,我们对数据验证的方法有了一定的认识。在下面的内容中,我们还将 通过更具体的实例,来对数据的有效性验证进行讲解。 ge Unloa 这个阶段页面己经处理完毕,需要做些清理工作。一般地,你可以在这个阶段关闭打开 的文件和数据库链路,或者释放对象。 1、断开数据库连接 请看如下脚本: <script language="VB"runat"server"> 定义一个共有变量 public Dim My Connection As SQLConnection 定义 Page Load事件 Sub Page Load(Src As Object, E As EventArgs) Dim MyCommand As SQLDataSet Command My Connection= New SQLConnection("server=iceberg; uid=sa pwd=; database=info") MyCommand= New SQLDataSet Command("select* from infor", My Connection My Command. FillDataSet(ds, "infor") My Data Grid Data Source=ds. Tables("infor"). DefaultView 第25页共132页
第二篇 Web Form 第 25 页 共 132 页 这样,我们只要定制不同的模板,就可以实现对不同数据的合法性校验了。所以,正则 表达式对象中最重要的属性就是:“Pattern”属性,只要真正掌握了这个属性,才可以自由的运 用正则表达式对象来为我们的数据校验进行服务。 程序的运行效果如图: 通过上面的介绍,我们对数据验证的方法有了一定的认识。在下面的内容中,我们还将 通过更具体的实例,来对数据的有效性验证进行讲解。 2.1.3.3.3 Page_Unload 这个阶段页面已经处理完毕,需要做些清理工作。一般地,你可以在这个阶段关闭打开 的文件和数据库链路,或者释放对象。 1、断开数据库连接 请看如下脚本: <script language="VB" runat="server"> ‘定义一个共有变量 public Dim MyConnection As SQLConnection ‘定义 Page_Load 事件 Sub Page_Load(Src As Object, E As EventArgs) Dim DS As DataSet Dim MyCommand As SQLDataSetCommand MyConnection = New SQLConnection("server='iceberg';uid=sa;pwd=;database=info") MyCommand = New SQLDataSetCommand("select * from infor",MyConnection) Myconnection.open() DS = New DataSet() MyCommand.FillDataSet(ds, "infor") MyDataGrid.DataSource=ds.Tables("infor").DefaultView