DDR爱好者之家 Design By 杰米
德国足协告诫那些可能前往德国观看2006年世界杯赛的球迷要提防假票,不要从非代理商和票贩子手中购票。世界杯门票都是高科技产品,门票被植入微芯片,只有通过合法途径取得门票的球迷才能入场。假票现象在近些年的足球大赛上泛滥成灾,德国足协希望能通过宣传避免世界杯球迷成为其受害者。
■ 验明正身 - 数据有效性
世界杯万人瞩目但门票有限,所以有人造假有人买假,安联球场的大门前站几位检票员必不可少,而我们的程序有时也一样。当你接到一个累积数年的数据表时,发现单单联系电话都有23种格式时,你是否也感叹到,在用户提交数据时系统也需要靠检票员来验证一下?可是我们还是发现象数据验证这样的内容往往容易被人忽视,许多系统常让拿着公车票的家伙混进球场撒野,各种数据如同发情野马一般长驱直入,先不说安全问题,从数据有效性的角度看,几年后它会象霉菌一样让整个数据库腐烂变质,垃圾成堆。不过常会有另一种声音在耳旁响起:"搞那么复杂做什么呀,这个系统、甚至是这个企业没等霉菌开始起作用,它就挂了!"
应用程序必须确保系统的数据有效性有二层含义:一是格式验证,要确保数据属于系统设计时定义的类型、范围,甚至是行业的特定格式,这通常在系统的UI层来完成验证;二是逻辑验证,数据间往往符合特定的业务逻辑规则,数据操作不能破坏其间逻辑关系而造成系统异常,这通常在系统的底层来完成验证。本文主要讨论前者的实现。
不过许多系统为了保持数据有效性常常矫枉过正,界面充斥着拥有复杂输入格式限制的文本输入框,要求用户花费大量时间来进行自我数据校正,填写个表单比高考画框框还要让人费劲,企业用户还好办些,最多抗议两声也就接受,互联网用户可不吃这一套,来点创意!
■ 检票的老太太们 - 验证器架构
WEB应用程序是基于表单来输入数据。为了确保数据有效性,我们必须在服务端对输入数据进行检验,但考虑到用户感受,往往又在客户端插入些javascript脚本。客户端验证就像我们呼吸空气时的鼻子,先把颗粒物杂质等阻挡在外面,从而大大减轻了肺的负担;服务器端验证是构建安全Web应用程序必需的,只有服务器端验证才可以提供真正应用程序级的安全。双重校验,琐碎无聊,怪不得没几人喜欢。
.NET首先将验证器与验证对象分离成两个部份,验证对象暴露验证属性,检票员们分头监督验证对象,完成数据校验,比较复杂的校验可以让几位检票员一起守着;每个页面需要一位领头,让她拿着名单,依次催促页面内每个验证器对所辖输入域进行验证,汇总出结果;最后页面需要某些控件能够自动触发验证,这个角色通常是由带有回发功能的Button类控件来扮演,如图13-1所示。
参与Web窗体验证的服务器控件必须实现IValidator接口,这是检票员们的共同特征。用Volidate方法完成校验过程,得出一个结果值IsValid属性,包含拒绝放行的理由ErrorMessage属性。于是有如下定义:
public interface IValidator"<script language=\"javascript\">\n");
sb_Script.Append("function cb_vefify(val) ");
sb_Script.Append("var isValid=false;\n");
sb_Script.Append("var val = document.all[document.all[\""+this.ID+"\"].controltovalidate];\n");
sb_Script.Append("var col = val.all;\n");
sb_Script.Append("if ( col != null )\n");
sb_Script.Append("for ( i = 0; i < col.length; i++ ) \n");
sb_Script.Append("if (col.item(i).tagName == \"INPUT\") \n");
sb_Script.Append("if ( col.item(i).checked )isValid=true; \n");
sb_Script.Append("return isValid;");
sb_Script.Append("");
sb_Script.Append("</script>");
this.Page.RegisterClientScriptBlock("RBLScript", sb_Script.ToString());
//通过设置验证器的evaluationfunction attribute来指定其客户端验证逻辑
this.Attributes["evaluationfunction"] = "cb_vefify";
"两位数字开头三位英文字母结尾",写正则表达式之前需要我们这么变换句式:"开头 数字",正则表达式为"^ [0-9]"。
在每条匹配规则中,可能出现的字符子串有个范围,属于固定的字符子集,正则表达式用常量、区域和逻辑运算来表示这个集合,如图13-2所例,值得注意是部份字符已被定义成元字符,具有特殊的含义。
每条匹配规则中,其字符子集可能出现重复,可以用两种方法表示:一是紧跟着字符子集后加个大括号,内标数字,另一种用元字符表示,如图13-3例。每条匹配规则中字符子集的位置由其在正则表达式中的位置决定,整个字符串开头用"^"表示,结尾用""表示。
在很多时候,两条或以上的匹配规则可能要用到同一个字符子集,如html标记中,标签声明应当是同一字符子集,比如"<div>……</div>"。如果要定义一个字符子集以便其后引用,可用小括号标识,用"\数字"引用。
正则表达式的应用范围很广,除了数据校验外,UBB论坛、页面动态转静态、搜索技术等时常出现它的身影,"我很丑可是我很能干",在这里我们仅仅只是探讨表达式的书写方法。最后用两个实例总结,如图13-4所示。
■ 验明正身 - 数据有效性
世界杯万人瞩目但门票有限,所以有人造假有人买假,安联球场的大门前站几位检票员必不可少,而我们的程序有时也一样。当你接到一个累积数年的数据表时,发现单单联系电话都有23种格式时,你是否也感叹到,在用户提交数据时系统也需要靠检票员来验证一下?可是我们还是发现象数据验证这样的内容往往容易被人忽视,许多系统常让拿着公车票的家伙混进球场撒野,各种数据如同发情野马一般长驱直入,先不说安全问题,从数据有效性的角度看,几年后它会象霉菌一样让整个数据库腐烂变质,垃圾成堆。不过常会有另一种声音在耳旁响起:"搞那么复杂做什么呀,这个系统、甚至是这个企业没等霉菌开始起作用,它就挂了!"
应用程序必须确保系统的数据有效性有二层含义:一是格式验证,要确保数据属于系统设计时定义的类型、范围,甚至是行业的特定格式,这通常在系统的UI层来完成验证;二是逻辑验证,数据间往往符合特定的业务逻辑规则,数据操作不能破坏其间逻辑关系而造成系统异常,这通常在系统的底层来完成验证。本文主要讨论前者的实现。
不过许多系统为了保持数据有效性常常矫枉过正,界面充斥着拥有复杂输入格式限制的文本输入框,要求用户花费大量时间来进行自我数据校正,填写个表单比高考画框框还要让人费劲,企业用户还好办些,最多抗议两声也就接受,互联网用户可不吃这一套,来点创意!
■ 检票的老太太们 - 验证器架构
WEB应用程序是基于表单来输入数据。为了确保数据有效性,我们必须在服务端对输入数据进行检验,但考虑到用户感受,往往又在客户端插入些javascript脚本。客户端验证就像我们呼吸空气时的鼻子,先把颗粒物杂质等阻挡在外面,从而大大减轻了肺的负担;服务器端验证是构建安全Web应用程序必需的,只有服务器端验证才可以提供真正应用程序级的安全。双重校验,琐碎无聊,怪不得没几人喜欢。
.NET首先将验证器与验证对象分离成两个部份,验证对象暴露验证属性,检票员们分头监督验证对象,完成数据校验,比较复杂的校验可以让几位检票员一起守着;每个页面需要一位领头,让她拿着名单,依次催促页面内每个验证器对所辖输入域进行验证,汇总出结果;最后页面需要某些控件能够自动触发验证,这个角色通常是由带有回发功能的Button类控件来扮演,如图13-1所示。
参与Web窗体验证的服务器控件必须实现IValidator接口,这是检票员们的共同特征。用Volidate方法完成校验过程,得出一个结果值IsValid属性,包含拒绝放行的理由ErrorMessage属性。于是有如下定义:
public interface IValidator"<script language=\"javascript\">\n");
sb_Script.Append("function cb_vefify(val) ");
sb_Script.Append("var isValid=false;\n");
sb_Script.Append("var val = document.all[document.all[\""+this.ID+"\"].controltovalidate];\n");
sb_Script.Append("var col = val.all;\n");
sb_Script.Append("if ( col != null )\n");
sb_Script.Append("for ( i = 0; i < col.length; i++ ) \n");
sb_Script.Append("if (col.item(i).tagName == \"INPUT\") \n");
sb_Script.Append("if ( col.item(i).checked )isValid=true; \n");
sb_Script.Append("return isValid;");
sb_Script.Append("");
sb_Script.Append("</script>");
this.Page.RegisterClientScriptBlock("RBLScript", sb_Script.ToString());
//通过设置验证器的evaluationfunction attribute来指定其客户端验证逻辑
this.Attributes["evaluationfunction"] = "cb_vefify";
"两位数字开头三位英文字母结尾",写正则表达式之前需要我们这么变换句式:"开头 数字",正则表达式为"^ [0-9]"。
在每条匹配规则中,可能出现的字符子串有个范围,属于固定的字符子集,正则表达式用常量、区域和逻辑运算来表示这个集合,如图13-2所例,值得注意是部份字符已被定义成元字符,具有特殊的含义。
每条匹配规则中,其字符子集可能出现重复,可以用两种方法表示:一是紧跟着字符子集后加个大括号,内标数字,另一种用元字符表示,如图13-3例。每条匹配规则中字符子集的位置由其在正则表达式中的位置决定,整个字符串开头用"^"表示,结尾用""表示。
在很多时候,两条或以上的匹配规则可能要用到同一个字符子集,如html标记中,标签声明应当是同一字符子集,比如"<div>……</div>"。如果要定义一个字符子集以便其后引用,可用小括号标识,用"\数字"引用。
正则表达式的应用范围很广,除了数据校验外,UBB论坛、页面动态转静态、搜索技术等时常出现它的身影,"我很丑可是我很能干",在这里我们仅仅只是探讨表达式的书写方法。最后用两个实例总结,如图13-4所示。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]