人们总是害怕改变.电被发明出来的时候他们害怕电,是不是?他们害怕煤,害怕蒸汽机车.无知无所不在,并导致恐惧.但随着时间推移,人们终究会接受最新的科技.
正如比尔盖茨曾经警告过一样,计算机已经真正成为我们的最新科技,几乎遍布我们日常生活的每一方面.所以,我们这个时代的某些最伟大的头脑开始思索起计算机和软件对于人类的重要性来了.以下就是101条有关计算机的伟大名言,并且,既然我们这个网站是一个软件开发网站,我们尤其关注编程方面的.
计算机
1、计算机没什么用.他们只会告诉你答案.(巴勃罗毕加索,画家)
2、计算机就跟比基尼一样,省去了人们许多的胡思乱想.(萨姆尤因,作家)
3、他们拥有计算机,他们也还可能拥有其他的大规模杀伤性武器.(珍内特雷诺,美国前女司法部长)
4、跟计算机工作酷就酷在这里,它们不会生气,能记住所有东西,还有,它们不会喝光你的啤酒.(保罗利里,吉他手)
5、如果汽车能赶上计算机的发展周期的话,一辆今天的劳斯莱斯仅值100美元,每加仑要跑100万英里,每年还得爆炸一次,把里面的人杀个精光.(Robert X. Cringely,技术作家)
计算机智能
6、计算机总是越来越智能的.科学家告诉我们说不久它们就能跟我们对话了.(这里的它们,我指的是计算机.我怀疑科学家永远都不能跟我们对话.)
(Dave Barry,幽默作家)
7、我最近注意到,在共同文化中,那种对计算机变得智能化并最终掌控世界的妄想恐惧症几乎彻底消失了.据我所知,这跟MS-DOS的发布基本是同步的.(Larry DeLuca)
8、计算机会不会思考这个问题就像问潜水艇会不会游泳一样.(Edsger W. Dijkstra,图灵奖获得者)
9、活了一百年却只能记住30M字节是荒谬的.你知道,这比一张压缩盘还要少.人类境况正在变得日趋退化.(Marvin Minsky,人工智能研究的奠基人)
信任
10、这座城市的中央计算机告诉你的?R2D2,你不该相信一台陌生的计算机!(C3PO,星球大战中的翻译机器人)
11、永远不要相信一台不能扔掉一扇窗户*的计算机(斯蒂夫沃兹尼亚克,苹果联合创始人)
*译者:暗指微软的wINDOWS操作系统
硬件
12、硬件:计算机系统中可被踢的部分.(Jeff Pesis)
软件
13、今天大部分的软件都很像上百万块砖堆叠在一起组成的埃及金字塔,缺乏结构完整性,只能靠强力和成千上万的奴隶完成.(阿伦凯,图灵奖获得者,面向对象创始人)
14、我终于明白'向上兼容性'是怎么回事了.这是指我们得保留所有原有错误.(Dennie van Tassel)
操作系统
15、有两样重要产品出自伯克利:LSD和BSD*.我们不相信这是个巧合.(Jeremy S. Anderson)
*译者:LSD是一种药力至强的迷幻剂,BSD-BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统
16、2038年1月19日,凌晨3点14分07秒(UNIX中的世界末日*1970年1月1号之后的2^32秒)
*译者:word跟world同音,UNIX用4个字节(WORD)表示时间,所以最多只能计时2^32秒
17、每个操作系统都差不多 我们都一样的烂.(微软的高级副总裁布莱恩瓦伦蒂尼这样描述操作系统的安全状况,2003)
18、微软有出了个新版本,Windows XP,据大家说是'有史以来最稳定的Windows', 对我而言, 这就好像是在说芦笋是'有史以来发音最清脆的蔬菜一样' (Dave Barry)
互联网
19、互联网?那个东西还在吗?(Homer Simpson)
20、网络就像是个母夜叉.我每转到一处都会看见小个的按钮命令我提交*.(Nytwind)
*译者注:Submit:提交,另一层意思是要求屈服
21、想想看吧,已经有一百万只猴子坐在一百万台打字机旁,可Usenet就是比不上莎士比亚.(Blair Houghton)
软件产业
22、计算机软件产业最为惊人的成就,是其持续不断地放弃硬件产业的惊人成果和稳定性.(Henry Petroski)
23、真正的创新经常来自于那些贴近市场、但无力拥有市场的的小型初创公司.(Timm Martin)
24、人们常说,伟大的科学学科就像是站在其它巨人肩膀上的巨人.人们也说过,软件产业正如站在其他侏儒脚上的侏儒.(Alan Cooper,交互设计之父)
25、这无关比特、字节和协议,而关乎利润和损益.(郭士纳,IBM前CEO)
26、我们是微软.反抗是徒劳的.你会被同化的.(保险杠贴纸)
软件演示
27、不管演示在彩排的时候有多好,一旦在观众面前展示时,演示不出错的几率与观众人数成反比,与投入的金钱总额成正比.(Mark Gibbs)
软件专利
28、专利大多数都是垃圾.浪费时间去阅读这些专利是愚蠢的.只有专利持有人才会这么干,还得强迫自己才会看.(Linus Torvalds,LINUX创始人)
复杂性
29、控制复杂性是计算机编程的本质.(Brian Kernigan)
30、复杂性杀死一切.它把程序员的生活给搞砸了,它令产品难以规划、创建和测试,带来了安全挑战,并导致最终用户和管理员沮丧不已.(Ray Ozzie)
31、进行软件设计有两种方式.一种是让它尽量简单,让人看不出明显的不足.另一种是弄得尽量复杂,让人看不出明显的缺陷.(C.A.R. Hoare)
32、好的软件的作用是让复杂的东西看起来简单.(Grady Booch,UML创始人之一)
易用性
33、不管那些计算机书籍如何宣称,只需记住,你并非'傀儡'.真正的傀儡是那些无法设计出易于使用的硬件和软件的那些人,尽管他们是技术专家,因为这是普通消费者赖以生活的东西.(Walter Mossberg,科技专栏记者)
34、软件供应商在努力尝试让他们的软件更'易于操作' 迄今为止,他们最好的办法就是翻出所有的老手册,然后在封面盖上'易于操作'这几个字.(比尔盖茨)
35、有个老套的故事说有人希望他的计算机能像他的电话机一样好用.他的愿望实现了,因为我已经不知道该如何使用自己的电话了.(Bjarne Stroustrup,C++之父)
用户
36、任何一个傻瓜都会用电脑.很多都会.(Ted Nelson)
37、只有两个行业把客户称为'用户'*.(Edward Tufte,信息设计大师)
*译者注:一个是计算机设计,另一个是毒品交易,computer design and drug dealing
程序员
38、程序员在跟宇宙赛跑,他们在努力开发出更大更好的傻瓜程序,而宇宙则努力培养出更大更好的白痴.到目前为止,宇宙领先.(Rich Cook)
39、你们当中很多人都知道程序员的美德.当然啦,有三种:那就是懒惰、急躁以及傲慢.(Larry Wall,Perl发明者)
40、程序员的问题是你无法预料他在做什么,直到为时已晚.(Seymour Cray,超级计算机之父)
41、那就是这些自认为痛恨计算机的人的真实面目.他们实际上真正痛恨的是糟糕的程序员.(拉瑞尼文,科幻作家)
42、很长时间以来我一直困惑不已,为什么一些又贵又先进的东西会一点用都没有.直到我突然想起,计算机不就是一台愚蠢之至却拥有难以置信的做聪明事能力的机器嘛,而程序员不就是聪明绝顶却拥有难以置信的干蠢事的能力的人嘛.一句话,他们简直就是天生绝配.(比尔布莱森,旅游文学作家)
43、不像学学涂涂画画也能让某人成为专家级画家,计算机科学教育不会让任何人成为一名编程大师.(埃里克雷蒙,开源运动领袖)
44、一个程序员是经历以下事情后仍能证明自己是严格的专家的人:他可以历经数不清的捶打,可取材于无关紧要的文档,用上面的争议数据作出模糊假设,并以此计算出测微精度的无数片面理解的答案,并由一个不可靠、脑袋充满质疑、公开宣称要让一个倒霉透顶、没有指望、毫无防备,要求第一时间获得信息的部门狼狈不堪、令人生厌的人使用一台准确度有问题的仪器去实施.(IEEE网格新闻杂志)
45、运气好的黑客能用几个月的时间 - 生产出一个小规模的开发团体(比如说,7-8人)历尽艰辛一起工作了一年多才能做出来的东西.IBM经常报告说某些程序员的生产力要比其它工人高百倍,甚至更多.(Peter Seebach,黑客)
46、最好的程序员跟好的程序员相比可不止好那么一点点.这种好不是一个数量级的,取决于标准怎么定:概念创造性、速度、设计的独创性或者解决问题的能力.(兰德尔E斯特劳斯,科技作家)
47、伟大的车工值得给他几倍于普通车工的薪水,但一个伟大的软件代码作家,其价值则要等同于一个普通的软件写手的价格的1万倍.(比尔盖茨)
编程
48、就算它工作不正常也别担心.如果一切正常,你早该失业了.(Mosher的软件工程定律)
49、靠代码行数来衡量开发进程就好比用重量来衡量飞机制造的进度.(比尔盖茨)
50、写代码的社会地位比盗墓的高,比管理的低.(杰拉尔德温伯格,软件与系统思想家)
51、首先学习计算机科学及理论.接着形成自己编程的风格.然后把这一切都忘掉,尽管改程序就是了.(George Carrette,杰出软件工程师,开源推广者)
52、先解决问题再写代码.(John Johnson)
53、乐观主义是编程行业的职业病;用户反馈则是治疗方法.(Kent Beck)
54、迭代者为人,递归者为神.(L. Peter Deutsch)
55、布尔值最好的一点是,就算你错了,也顶多错了一位而已.(无名氏)
56、数组的下标是从0开始好还是从1开始好呢?我的0.5的折衷方案,以我之见,没有经过适当考虑就被否决掉了.(Stan Kelly-Bootle)
编程语言
57、只有两种编程语言:一种是天天挨骂的,另一种是没人用的.(Bjarne Stroustrup,C++之父)
58、PHP是不合格的业余爱好者创建的,他们犯做了个小恶;Perl是娴熟而堕落的专家创建的,他们犯了阴险狡诈的大恶.(Jon Ribbens)
59、COBOL的使用摧残大脑;其教育应被视为刑事犯罪.(E.W. Dijkstra)
60、把良好的编程风格教给那些之前曾经接触过BASIC的学生几乎是不可能的.作为可能的程序员,他们已精神残废,无重塑的可能了.(E. W. Dijkstra)
61、我想微软之所以把它叫做.Net,是因为这样它就不会在Unix的目录里显示出来了.(Oktal)
62、There is no programming languageno matter how structuredthat will prevent programmers from making bad programs.(Larry Flon)
63、计算机语言设计犹如在公园里漫步.我是说侏罗纪公园.(Larry Wall)
C/C++
64、搞了50年的编程语言的研究,我们难道就以C++告终啦?(Richard A. O'Keefe)
65、写C或者C++就像是在用一把卸掉所有安全防护装置的链锯.(Bob Gray)
66、在C++里你想搬起石头砸自己的脚更为困难了,不过一旦你真的做了,整条腿都要报销.(Bjarne Stroustrup)
67、C++ : 友人可造访你的私有成员之地也.(Gavin Russell Baker)
译者:Friends:C++的友元,是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字 friend.友元不是成员函数,但是它可以访问类中的私有成员.友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员.
68、罗马帝国灭亡的其中一个主要原因是他们没有0 - 这样他们就没法给自己的C程序指明成功退出的路径了.(Robert Firth)
Java
69、Java从许多方面来说就是C++.(Michael Feldman)
70、说Java好就好在运行于多个操作系统之上,就好像说肛交好就好在不管男女都行.(Alanna)
71、好吧,Java也许是编程语言的好榜样.但Java应用则是应用程序的坏榜样.(pixadel)
72、要是Java真的有垃圾回收的话,大部分程序在执行的时候就会把自己干掉了.(Robert Sewell)
开源
73、软件就像性事:免费/自由更好.(Linus Torvalds)
74、唯一对免费软件感到害怕的人,是自己的产品还要不值钱的人.(David Emery)
代码
75、好代码本身就是最好的文档.(Steve McConnell)
76、你自己的代码如果超过6个月不看,再看的时候也一样像是别人写的.(伊格尔森定律)
77、前面90%的代码要占用开发时间的前90%.剩下的10%的代码要占用开发时间的另一90%.(Tom Cargill)
软件开发
78、好的程序员会用脑,但是好的向导救我们于样样都要想到.(Francis Glassborow)
79、在软件里面,我们鲜有有意义的需求.就算有,衡量成功的唯一尺度也取决于我们的解决方案是否解决了客户对问题是什么的观念的转变.(Jeff Atwood)
80、想想我们计算机程序的糟糕现状吧,很显然软件开发仍是黑箱艺术,还不能称之为工程学科.(Bill Clinton,前美国总统)
81、没有伟大的团队就没有伟大的软件,可大部分的软件团队举止就像是支离破碎的家庭.(吉姆麦卡锡,微软VC++总监)
调试
82、一旦我们开始编程,就会惊讶地发现让程序正常没想象中那么简单.调试不可避免.那一刻我认记忆犹新,当时我就意识到,从今往后我生活的大部分时间都要花在寻找自己程序的错误上面了.(莫里斯威尔克斯 调试探索, 1949)
83、调试难度本来就是写代码的两倍.因此,如果你写代码的时候聪明用尽,根据定义,你就没有能耐去调试它了.(Brian Kernighan)
84、如果调试是除虫的过程,那么编程就一定是把臭虫放进来的过程.(Edsger W. Dijkstra)
质量
85、我才不管它能不能在你的机器上运行呢!我们又没装到你的机器上!(Vidiu Platon,罗马尼亚的微软最佳学生合作伙伴MSP)
86、编程就像性一样:一时犯错,终生维护.(Michael Sinz)
87、有两种写出无错程序的办法;只有第三种有用.(Alan J. Perlis)
88、软件质量与指针算法不可兼得.(Bertrand Meyer)
89、如果麦当劳像软件公司那样运作的话,每一百个巨无霸就会有一个令你食物中毒,而他们的回应是,'真对不起,这是一张额外附送两个的赠券.' (Mark Minasi)
90、永远要这样写代码,好像最终维护你代码的人是个狂暴的、知道你住在哪里的精神病患者.(Martin Golding)
91、是人都会犯错,不过要想把事情彻底搞砸还得请电脑出马.(Paul Ehrlich)
92、计算机比人类历史上的任何发明都更快速地导致你犯更多的错误可能除了枪和龙舌兰酒是例外.(Mitch Radcliffe)
预测
93、能发明的东西都发明出来了.(查尔斯杜埃尔, 美国专利局局长,1899年)
94、我认为全球市场约需5台计算机.(托马斯沃森, IBM董事长, 约1948年)
95、看上去我们已经到达了利用计算机技术可能获得的极限了,尽管下这样的结论得小心,因为不出五年这听起来就会相当愚蠢.(约翰冯诺伊曼,约1949年)
96、但这又有什么好处呢?(IBM先进计算机系统部的工程师对微芯片的评论, 1968年)
97、我们没有理由让每一个人在家都拥有一台电脑.(肯奥尔森,数据设备公司(DEC)总裁,1977年)
98、640K对每一个人来说都已足够.(比尔盖茨,1981年)
99、Windows NT的RAM寻址空间可达2G,这比任何应用程序所需都要多.(微软, 谈及Windows NT的开发时所言, 1992年)
100、我们永远也无法真正成为无纸化社会,直到掌上电脑一族发布擦我1.0*(WipeMe 1.0)为止.(安迪.皮尔逊,商界领袖)
*译者注:意思是说难道你大便不用纸吗?
101、长此以往,除了按键的手指外,人类的肢体将全部退化.(弗兰克??劳埃德??赖特,建筑师)
posted @ 2009-05-25 22:14 宫鸡炒饭 阅读(106) 评论(0)
编辑
正则表达式实现资料验证的技术总结
资料验证无论在C/S还是在B/S中的使用都是非常普遍的, 过去大家喜欢用一堆的 IF...else...判断输入的内容是否满足要求.
如今很多语言都支持正则表达式, 它定义了一套自己的语法规则 (常见语法包括;字符匹配、重复匹配、字符定位、转义匹配和其他高级语法)来完成各种资料的验证, 功能之强大在我看来几乎到了无敌的地步. 但是据我所了解(呵呵, 很可能是坐井观天, 如果有让哪位不爽请原谅我没见过世面)很多很多自称为(或他称)程序员的在平时的工作中很少用到正则表达式, 不知道什么原因, 可能是熟悉的环境比较安稳, 懒得求新; 也可能是当看到一长串诸如: ^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$ 的外星符号时眼眨晕, 不想求新;当然也可能是基本掌握了一些常用的资料验证的正则表达式, 便不想再去了解其中的原理.
当然这种现象是好是坏不好评说, 每个人想的都会有所不同. 但我依然强烈建议学懂它, 掌握正则表达式的使用方法会给工作带来很多方便, 因为它除了对于资料验证游刃有余外, 还能查找和查找替换,能在文本和数据流里测试特定的条件。能从大量的邮件中剔除垃圾邮件。在垃圾邮的回收应用中,程序使用正则表达式来判断在来信栏内是否存在已知的垃圾邮件地址。邮件过滤程序通常都使用正则表达式来执行这个操作。任何一种技术带来好处的同时也带来了很多不便, 正则表达式的强大也是基于它语法的复杂--可读性非常非常差! 所以说你要想很好的使用正则表达式, 又不想花一天的时间看别人写的那一长串外星字符, 只有自己把它学懂. 然后自已去写.
附件一:
正则表达式语法:
字符 说明
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\r”之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配。
* 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。
+ 一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。
? 零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。
{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。至少匹配 n 次,至多匹配 m 次。例如,“o{1,3}”匹配“fooooood”中的头三个 o。'o{0,1}' 等效于 'o?'。注意:您不能将空格插入逗号和数字之间。
? 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。
. 匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式。
(pattern) 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0...$9 属性从结果“匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用“\(”或者“\)”。
(?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“或”字符 (|) 组合模式部件的情况很有用。例如,与“industry|industries”相比,“industr(?:y| ies)”是一个更加经济的表达式。
(?=pattern) 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows (?=95| 98| NT| 2000)”与“Windows 2000”中的“Windows”匹配,但不与“Windows 3.1”中的“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
(?!pattern) 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows (?!95| 98| NT| 2000)”与“Windows 3.1”中的“Windows”匹配,但不与“Windows 2000”中的“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
x| y 与 x 或 y 匹配。例如,“z| food”与“z”或“food”匹配。“(z| f)ood”与“zood”或“food”匹配。
[xyz] 字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。
[^xyz] 反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。
[a-z] 字符范围。匹配指定范围内的任何字符。例如,“[a-z]”匹配“a”到“z”范围内的任何小写字母。
[^a-z] 反向范围字符。匹配不在指定的范围内的任何字符。例如,“[^a-z]”匹配任何不在“a”到“z”范围内的任何字符。
\b 匹配一个字边界,即字与空格间的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。
\B 非字边界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。
\cx 匹配由 x 指示的控制字符。例如,\cM 匹配一个 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是“c”字符本身。
\d 数字字符匹配。等效于 [0-9]。
\D 非数字字符匹配。等效于 [^0-9]。
\f 换页符匹配。等效于 \x0c 和 \cL。
\n 换行符匹配。等效于 \x0a 和 \cJ。
\r 匹配一个回车符。等效于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 制表符匹配。与 \x09 和 \cI 等效。
\v 垂直制表符匹配。与 \x0b 和 \cK 等效。
\w 匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。
\W 任何非字字符匹配。与“[^A-Za-z0-9_]”等效。
\xn 匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,“\x41”匹配“A”。“\x041”与“\x04”&“1”等效。允许在正则表达式中使用 ASCII 代码。
\num 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,“(.)\1”匹配两个连续的相同字符。
\n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。
\nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,那么 n 是反向引用,后面跟 m。如果前面的条件均不存在,那么当 n 和 m 是八进制数 (0-7) 时,\nm 匮..
附件二: 常用资料验证技术(正则表达式完成)
一.网络验证应用技巧
1. 验证 E-mail格式
public bool IsEmail(string str_Email)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Email,
@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
2. 验证 IP 地址
public bool IPCheck(string IP)
{
string num = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
return Regex.IsMatch(IP, ("^" + num + "\\." + num + "\\." + num + "\\." + num + "$"));
}
3. 验证 URL
public bool IsUrl(string str_url)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_url, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
}
二. 常用数字验证技巧
1. 验证电话号码
public bool IsTelephone(string str_telephone)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_telephone, @"^(\d{3,4}-)?\d{6,8}$");
}
2. 输入密码条件(字符与数据同时出现)
public bool IsPassword(string str_password)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_password, @"[A-Za-z]+[0-9]");
}
3.邮政编号
public bool IsPostalcode(string str_postalcode)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_postalcode, @"^\d{6}$");
}
4. 手机号码
public bool IsHandset(string str_handset)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^[1]+[3,5]+\d{9}$");
}
5.身份证号
public bool IsIDcard(string str_idcard)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_idcard, @"(^\d{18}$)|(^\d{15}$)");
}
6. 两位小数
public bool IsDecimal(string str_decimal)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_decimal, @"^[0-9]+(.[0-9]{2})?$");
}
7.一年的12个月
public bool IsMonth(string str_Month)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$");
}
8.一个月的31天
public bool IsDay(string str_day)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$");
}
9.数字输入
public bool IsNumber(string str_number)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_number, @"^[0-9]*$");
}
10. 密码长度 (6-18位)
public bool IsPasswLength(string str_Length)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Length, @"^\d{6,18}$");
}
11. 非零的正整数
public bool IsIntNumber(string str_intNumber)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_intNumber, @"^\+?[1-9][0-9]*$");
}
三. 常用字符验证技巧
1. 大写字母
public bool IsUpChar(string str_UpChar)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_UpChar, @"^[A-Z]+$");
}
2. 小写字母
public bool IsLowChar(string str_UpChar)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_UpChar, @"^[a-z]+$");
}
3. 检查字符串重复出现的词
private void btnWord_Click(object sender, EventArgs e)
{
System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(label1.Text,
@"\b(?\w+)\s+(\k)\b", System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if (matches.Count != 0)
{
foreach (System.Text.RegularExpressions.Match match in matches)
{
string word = match.Groups["word"].Value;
MessageBox.Show(word.ToString(),"英文单词");
}
}
else { MessageBox.Show("没有重复的单词"); }
}
4. 替换字符串
private void button1_Click(object sender, EventArgs e)
{
string strResult = System.Text.RegularExpressions.Regex.Replace(textBox1.Text, @"[A-Za-z]\*?", textBox2.Text);
MessageBox.Show("替换前字符:" + "\n" + textBox1.Text + "\n" + "替换的字符:" + "\n" + textBox2.Text + "\n" +
"替换后的字符:" + "\n" + strResult,"替换");
}
5. 拆分字符串
private void button1_Click(object sender, EventArgs e)
{
//实例: 甲025-8343243乙0755-2228382丙029-32983298389289328932893289丁
foreach (string s in System.Text.RegularExpressions.Regex.Split(textBox1.Text,@"\d{3,4}-\d*"))
{
textBox2.Text+=s; //依次输出 "甲乙丙丁"
}
}
6. 验证输入字母
public bool IsLetter(string str_Letter)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Letter, @"^[A-Za-z]+$");
}
7. 验证输入汉字
public bool IsChinese(string str_chinese)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_chinese, @"^[\u4e00-\u9fa5],{0,}$");
}
8. 验证输入字符串 (至少8个字符)
public bool IsLength(string str_Length)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Length, @"^.{8,}$");
}
posted @ 2009-01-19 00:43 宫鸡炒饭 阅读(39) 评论(0)
编辑
javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
把上面的红色代码复制到IE浏览器的地址栏中,然后回车,你会发现,网页中所有的元素可以任由我们宰割了哦,呵呵
看下面这个更狠,也是适用IE的
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);
试试就知道什么是成群结队了,有点汗~~使用方法同上
posted @ 2009-01-13 15:48 宫鸡炒饭 阅读(82) 评论(0)
编辑
这段文章是针对上面例子的http://www.cnblogs.com/gongjichaofan/archive/2009/01/10/1373093.html乱码问题
IE中,发送的名值对如果有中文,则可能会出现乱码的问题,在firefox也有可能出现乱码,所以都要测试一下。
出现乱码的是因为编码的规范不一样,如在IE中是以UTF-8的格式发送的,汉字就是三个字节以十六进制的形式表示。
那么我们要做的就是统一编码规范,这样在不同的浏览器都会解析出正确的文字~~
一是:客户端发送的信息编码统一:把要发送的可能出现中文的字段进行两次encodeURI(String)--在JS里
二是:服务端接受的编码解析统一:String name=URLDecoder.decode(old,"UTF-8");--反映name到客户端
posted @ 2009-01-13 14:54 宫鸡炒饭 阅读(41) 评论(0)
编辑
开发中页面缓存的问题:这个问题是体现在IE浏览器和其他浏览器(firefox)的差异!在IE中,当我们重复访问同一URL的时候,浏览器判断URL的访问没有变化,所以就会访问缓存中的文件,一方面减轻服务器的压力,另一方面本机的访问速度也提升了,而其他的浏览器(firefox)则不会。
其实IE本来是好意,但是我们有的时候却需要在多次访问同一URL的时候去真正的访问服务器,而不是本地缓存~~~这么说可能有点抽象,那就举个例子吧,呵呵。
有一些网站,带有用户注册登录等功能的网站,如提供电子邮箱的网站~~~
为了防止恶习访问(暴力破解,长时间重复访问)服务器增加负担,当访问次数达到一定数目后,服务器会判定这是个恶意的访问,然后提示输入验证码来继续访问。这些验证码图片是程序合成的,一般机器是很难识别的,只能有人为识别内容。但是毕竟是程序合成的图片,有的时候太不清楚也会让人也不能识别或者网路传输图片失败,这个时候刷新验证码,意思就是访问同一个URL,这个时候IE的问题就出现了--IE总是去访问本地的缓存,验证码无法重新获取~~~
问题就是:同一URL在IE中访问不交互服务器的问题!!
在这里有这样一个办法来解决这个问题!
分析一下,IE之所以不访问服务器是因为我们在缓存清除之前多次访问了同一个URL,那么我们可以在URL中添加一些信息,添加一些无关紧要的,又实时会改变的信息--例如:时间!意思是:每次访问服务器的时间不同,可以利用这个性质来"欺骗"IE--在URL上添加时间戳(timeStamp)信息!!
为了演示例子,我们仍然可以接住之前的文章http://www.cnblogs.com/gongjichaofan/archive/2009/01/11/1373566.html代码修改如下

时间戳信息拼接JS
function checkname() {
var url= "ClassicServer?username=" +$("#username").val();
url=getcoURL(url);
$.get(url, null,function(data){
$("#result").html(data);
});
}
function getcoURL(url){
var timestamp=(new Date()).valueOf();
if(url.indexOf("?")>=0){
url=url+"&t="+timestamp;
}else{
url=url+"?t="+timestamp;
}
return url;
}
至于服务器端的修改,一般是在方法中添加如下代码

服务器代码
Integer into = (Integer) request.getSession().getAttribute("totle");
int times=0;
if(into==null){
times=1;
} else{
times=into.intValue()+1;
}
request.getSession().setAttribute("totle",times);
然后把times以某种方式传值或者显示输出都可以~~
posted @ 2009-01-13 13:54 宫鸡炒饭 阅读(101) 评论(0)
编辑