﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-寻梦岁月-随笔分类-Other</title><link>http://www.cnitblog.com/ffan/category/477.html</link><description>寻梦的岁月不言辛苦几许,不问收获几多…</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 09:10:58 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 09:10:58 GMT</pubDate><ttl>60</ttl><item><title>超级P2P搜索引擎让所有收费网站破产！</title><link>http://www.cnitblog.com/ffan/archive/2006/04/02/8475.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 01 Apr 2006 17:14:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2006/04/02/8475.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/8475.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2006/04/02/8475.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/8475.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/8475.html</trackback:ping><description><![CDATA[
		<span id="zoom">
				<span id="blogContenttext">超级P2P搜索引擎让所有收费网站破产！ <br /><br />搜索Google大家都用过吧？我们正是利用它强劲的搜索功能来突破封锁下载，Google搜索和限制下载有什么关系，没可能实现吧？不要不相信哦，往下看哦！ <br />　　 <br />　　<a href="http://www.google.com/intl/zh-CN/" target="_blank">http://www.google.com/intl/zh-CN/</a><br />　　<a href="http://www.3721.com/" target="_blank">http://www.3721.com/</a><br />　　<a href="http://www.baidu.com/" target="_blank">http://www.baidu.com/</a><br />　　 <br />　　首先打开Google，在关键词输入框中输入“index of/“inurl:lib(双引号为英文状态下），选择“搜索简体中文网页”选项，回车搜索，得到了一些网页，不要以为这是一些普通的页面，其实它们是一些图书网站的资源列表，点击打开它来看看，怎么样？是不是所有资源一收眼底了？ <br />　　 <br />　　使用其他关键字可能得到更多的资源： <br />　　 <br />　　在搜索框上输入：“index of /“cnki <br />　　 <br />　　再按搜索你就可以找到许多图书馆的CNKI、VIP、超星等入口！ <br />　　 <br />　　在搜索框上输入：“index of /“ ppt <br />　　 <br />　　再按搜索你就可以突破网站入口下载powerpint作品！ <br />　　 <br />　　在搜索框上输入：“index of /“mp3 <br />　　 <br />　　再按搜索你就可以突破网站入口下载mp3、rm等影视作品！ <br />　　 <br />　　在搜索框上输入：“index of /“swf <br />　　 <br />　　再按搜索你就可以突破网站入口下载flash作品！ <br />　　 <br />　　在搜索框上输入：“index of /“加上要下载的软件名 <br />　　 <br />　　再按搜索你就可以突破网站入口下载软件！ <br />　　 <br />　　在搜索框上输入：“index of /“AVI <br />　　 <br />　　再按搜索你就可以突破网站入口下载AVI视频 <br />　　 <br />　　你会找到什么呢？同理，把AVI换为MPEG看看又会找到什么呢？呵呵！接下来不用我再教了吧？那就试一下你的手气吧！ <br />　　 <br />　　“index of /“ RMVB <br />　　“index of /“ WMA <br />　　“index of /“ MTV <br />　　“index of /“ MPEG <br />　　 以下是百度搜索排名 <br />　　1. index of mpeg4 <br />　　3. index of mp3 <br />　　4. index of cnki <br />　　5. index of rmvb <br />　　6. index of rm <br />　　7. index of movie <br />　　8. index of swf <br />　　9. index of jpg <br />　　10. index of admin <br />　　12. index of pdf <br />　　13. index of doc <br />　　14. index of wmv <br />　　15. index of mdb <br />　　16. index of mpg <br />　　17. index of mtv <br />　　18. index of software <br />　　19. index of mov <br />　　20. index of asf <br />　　23. index of lib <br />　　24. index of vod <br />　　25. index of rar <br />　　27. index of exe <br />　　28. index of iso <br />　　29. index of video <br />　　30. index of book <br />　　31. index of soft <br />　　32. index of chm <br />　　33. index of password <br />　　34. index of game <br />　　35. index of music <br />　　36. index of dvd <br />　　37. index of mid <br />　　38. index of ebook <br />　　40. index of download <br />　　 <br />　　到这里，大家也许都明白了，其实就是“index of /“这个关键词在起的作用，使用它可以直接进入网站首页下的所有文件和文件夹中，不必在通过HTTP的网页形式了，从而避免了那些网站的限制，作到了突破限制下载。 <br />　　 <br />　　怎么回事？点鼠标右键直接用网际快车下不了，都是网页，链接地址是乱码。别灰心懈气，可以在新窗口中打开页面中的超链接，真实地址不就出来了。下面就用马克思ie（mxie）这个超级P2P共享资源搜索引擎帮你搞定收费网站。 <br />　　马克思ie简体中文网址：<a href="http://cn.mxie.com/down.html" target="_blank">http://cn.mxie.com/down.html</a><br />　　<a href="http://cn.mxie.com/mxie0400Setup_cn.exe" target="_blank">http://cn.mxie.com/mxie0400Setup_cn.exe</a><br />　　 <br />　　马克思ie（mxie） <br />　　软件大小：3307KB <br />　　软件语言：简体中文 <br />　　软件类别：国产软件/免费版/搜寻引擎 <br />　　运行环境：Win9x/Me/NT/2000/XP <br />　　 马克思ie（mxie）是一个拥有网页浏览器功能的超级P2P搜索引擎，完全免费！各种音乐、电影、动漫、小说、图片等娱乐文件，一切你想得到的都可以找到！采用目前最为先进的多点P2P技术，搜寻到的就能下载到，绝对无死链！神奇的“越多人下载越高速”特性，充分挖掘你的带宽潜力，保证高速！独家装备了强力防火墙穿透利器，即使在严密防护的企业防火墙后也能通行自如。 <br />　　完全免费，永远免费！ <br />　　完全免费！永远免费！马克思ie（mxie）就是要把免费进行到底！奉行网络上的马克思主义，打造影音娱乐共产帝国！ <br />　　 <br />　　编者自述：此方法采用独特技巧，集成了网络加速及穿透防火墙的P2P共享技术，能够无限提升你的网速！－－－－高手自然一点就透，对于菜鸟本人也不想浪费唇舌多作解释，以下跟着洒家向前冲： <br />　　 <br />　　先下一个exe文件合成器“绿色分割 V3.1”： <br />　　<a href="http://www.pcdog.com/soft/20205.htm" target="_blank">http://www.pcdog.com/soft/20205.htm</a><br />　　<a href="http://www1.pcdog.com/down/Split3.1.rar" target="_blank">http://www1.pcdog.com/down/Split3.1.rar</a><br />　　 <br />　　解压到指定文件夹。再下一个加速软件“speed4web”： <br />　　Speed4WEB 可以帮忙你把浏览器的速度提升到原来的300%!程序使用简单,提交小巧!功能强大! <br />　　Speed4WEB V2.2.3.2 汉化版： <br />　　<a href="http://www.yqdown.com/soft/675.htm" target="_blank">http://www.yqdown.com/soft/675.htm</a><br />　　<a href="http://km.yqdown.com:8989/UUAuth/wlgj/Speed4WEB_v2.H.rar" target="_blank">http://km.yqdown.com:8989/UUAuth/wlgj/Speed4WEB_v2.H.rar</a><br />　　<a href="http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe" target="_blank">http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe</a><br />　　<a href="http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe" target="_blank">http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe</a><br />　　 <br />　　解压安装后点击桌面图标打开，在所有选项前均打勾（除了“总在顶部”），最小化令其运行。 <br />　　点桌面图标右键，点属性，点查找目标，找出其真实应用文件“Speed4WEB.exe”，将它复制到指定文件夹。 <br />　　 <br />　　选择你最想加速的文件***：点桌面图标右键，点属性，点查找目标，找出其真实应用文件“***.exe”，复制到指定文件夹。 <br />　　 <br />　　双击打开绿色分割，点“合并”，点“合并任意文件”，点+号依次选择“***.exe、Speed4WEB.exe”，点“设置”，点“正常、分割完成后生成合并exe文件”，点“保存文件”选择***文件原路径，重命名为“***.exe”，点开始即可替换原“***.exe”。 <br />　　 <br />　　注意：合并过程中***软件不可使用，否则无法成功替换原***文件！也不可以关闭Speed4WEB！ <br />　　 <br />　　再下一个共享资源搜索利器“马克思ieV.0.4.0.0 最新版-- <br />　　马克思ie简体中文网址：<a href="http://cn.mxie.com/down.html" target="_blank">http://cn.mxie.com/down.html</a><br />　　<a href="http://cn.mxie.com/mxie0400Setup_cn.exe" target="_blank">http://cn.mxie.com/mxie0400Setup_cn.exe</a><br />　　 <br />　　解压双击安装后，以“马克思ie（mxie）”为例，下载后重命名为“马克思ie（mxie）.exe”即可直接双击安装，点桌面上刚刚生成的”马克思ie（mxie）”图标右键，点属性，点查找目标，找出其真实应用文件“mxie.exe”，复制到指定文件夹。下面按步就搬即可。 <br />　　 <br />　　以上方法经本人测试，适合于各式各样五花八门的下载工具、游戏、浏览器以及其它一切与网络相关的软件。－－－－这种合成的软件同时运行的越多，网速愈快！ <br />　　 <br />　　每个人上网的方式与宽带限制都不一样，有时候是电信局封了BT端口或用了扫描仪限制下载流量，请恕本人也无能为力了！用过马克思ie的朋友仍然嫌慢的话，请打上下面的补丁 <br />　　 <br />　　最新上传漏洞通用工具 V1.0 <br />　　<a href="http://soft.sq88.com/soft/537.htm" target="_blank">http://soft.sq88.com/soft/537.htm</a><br />　　<a href="http://download.sq88.com/hk/upld.rar" target="_blank">http://download.sq88.com/hk/upld.rar</a><br />　　 <br />　　动网下载中心上传漏洞利用工具 <br />　　<a href="http://soft.sq88.com/soft/419.htm" target="_blank">http://soft.sq88.com/soft/419.htm</a><br />　　<a href="http://download.sq88.com/hk/dvup.rar" target="_blank">http://download.sq88.com/hk/dvup.rar</a><br />　　 <br />　　任意下载其中一个后门程序，解压后即可见其中的两个ActiveX控件“MSINET.OCX、MSWINSCK.OCX”，然后再用绿色分割合并即可。 <br />　　 <br />　　好了，废话少说。觉得有用请顶一下，并帮我多多转贴，别小心眼偷懒呀！ <br />　　当网上有半数人熟悉此法时，估计收费网站也要破产了！ <br />　　 <br />　　楼下的朋友看不懂么？我晕。后缀名为.exe的文件，下载后可重命名***.exe，直接双击安装即可，而不是用RAR解压，这个难道还用问我？压缩包中的绿色分割放进RAR解压，其后缀名已经是“Split3.1.exe“,直接从压缩包中拖出来即可双击使用</span>
		</span>
<img src ="http://www.cnitblog.com/ffan/aggbug/8475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2006-04-02 01:14 <a href="http://www.cnitblog.com/ffan/archive/2006/04/02/8475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 常用命令</title><link>http://www.cnitblog.com/ffan/archive/2006/03/11/7500.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 11 Mar 2006 13:45:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2006/03/11/7500.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/7500.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2006/03/11/7500.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/7500.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/7500.html</trackback:ping><description><![CDATA[
		<p align="left">
				<font size="3">su <br />su命令是最基本的命令之一，常用于不同用户间切换。例如，如果登录为 user1，要切换为user2，只要用如下命令： <br />$su user2 <br />然后系统提示输入user2口令，输入正确的口令之后就可以切换到user2。完成之后就可以用exit命令返回到user1。 <br />su命令的常见用法是变成根用户或超级用户。如果发出不带用户名的su命令 ，则系统提示输入根口令，输入之后则可切换为根用户。 <br />如果登录为根用户，则可以用su命令成为系统上任何用户而不需要口令。 </font>
		</p>
		<p align="left">
				<font size="3">pwd <br />pwd命令也是最常用最基本的命令之一，用于显示用户当前所在的目录。 </font>
		</p>
		<p align="left">
				<font size="3">cd <br />cd命令不仅显示当前状态，还改变当前状态，它的用发跟dos下的cd命令基本一致。 <br />cd ..可进入上一层目录 <br />cd -可进入上一个进入的目录 <br />cd ~可进入用户的home目录 </font>
		</p>
		<p align="left">
				<font size="3">ls <br />ls命令跟dos下的dir命令一样，用于显示当前目录的内容。 <br />如果想取得详细的信息，可用ls -l命令， 这样就可以显示目录内容的详细信息。 <br />如果目录下的文件太多，用一屏显示不了，可以用ls -l |more分屏显示 。 </font>
		</p>
		<p align="left">
				<font size="3">find <br />find命令用于查找文件。这个命令可以按文件名、建立或修改日期、所有者(通常是建立文件的用户)、文件长度或文件类型进行搜索。 <br />find命令的基本结构如下： <br />$find <br />其中指定从哪个目录开始搜索。指定搜索条件。表示找到文件怎么处理。一般来说，要用-print动作，显示 整个文件路径和名称。如果没有这个动作，则find命令进行所要搜索而不显示结果，等于白费劲。 <br />例如，要搜索系统上所有名称为ye的文件，可用如下命令： <br />$find / -name ye -print <br />这样就可以显示出系统上所有名称为ye的文件。 </font>
		</p>
		<p align="left">
				<font size="3">tar <br />tar最初用于建立磁带备份系统，目前广泛用于建立文件发布档案。可用如下方法建立tar档案： <br />$tar cvf <br />例如，如果要将当前目录中所有文件存档到ye.tar中，可用如下命令： <br />$tar cvf ye.tar *.* <br />要浏览档案内容，将c选项变成t。如果要浏览ye.tar档案中的内容，可用如下命令： <br />$tar tvf ye.tar <br />要取出档案内的内容，将c选项变成x。如果要将ye.tar档案中的内容取到当前目录中，可用如下命令： <br />$tar xvf ye.tar </font>
		</p>
		<p align="left">
				<font size="3">gzip <br />gzip命令用于压缩文件。 例如，如果要将ye.txt文件压缩，可用如下命令： <br />$gzip ye.txt <br />这样就可以压缩文件并在文件名后面加上gz扩展名，变成文件ye.txt.gz。 <br />解压缩文件可用gzip -d命令实现： <br />$gzip -d ye.txt.gz <br />这样就可以解压缩文件并删除gz扩展名。除此之外还可以用gunzip命令来解 压缩文件，效果跟用gzip -d命令一样。 <br />旧版的tar命令不压缩档案，可用gzip压缩。例如： <br />$tar cvf ye.tar *.txt <br />$gzip ye.tar <br />则可建立压缩档案ye.tar.gz。 <br />新版的tar可以直接访问和建立gzip压缩的tar档案，只要在tar命令中加上z 选项就可以了。例如： <br />$tar czvf ye.tar *.txt <br />生成压缩档案ye.tar.gz， <br />$tar tzvf ye.tar *.txt <br />显示压缩档案ye.tar.gz的内容，而 <br />$tar xzvf ye.tar *.txt <br />取出压缩档案ye.tar.gz的内容。 </font>
		</p>
		<p align="left">
				<font size="3">mkdir <br />这个命令很简单，跟dos的md命令用法几乎一样，用于建立目录。 </font>
		</p>
		<p align="left">
				<font size="3">cp <br />cp命令用于复制文件或目录。 <br />cp命令可以一次复制多个文件，例如： <br />$cp *.txt *.doc *.bak /home <br />将当前目录中扩展名为txt、doc和bak的文件全部复制到/home目录中。 <br />如果要复制整个目录及其所有子目录，可以用cp -R命令。 </font>
		</p>
		<p align="left">
				<font size="3">rm <br />rm命令用于删除文件或目录。 <br />rm命令会强制删除文件，如果想要在删除时提示确认，可用rm -i命令。 <br />如果要删除目录，可用rm -r命令。rm -r命令在删除目录时，每删除一个文件或目录都会显示提示，如果目录太大，响应每个提示是不现实的。这时可以用 rm -rf命令来强制删除目录，这样即使用了-i标志也当无效处理。 </font>
		</p>
		<p align="left">
				<font size="3">mv <br />mv命令用于移动文件和更名文件。例如： <br />$mv ye.txt /home <br />将当前目录下的ye.txt文件移动到/home目录下， <br />$mv ye.txt ye1.txt <br />将ye.txt文件改名为ye1.txt。 <br />类似于跟cp命令，mv命令也可以一次移动多个文件，在此不再赘叙。 </font>
		</p>
		<p align="left">
				<font size="3">reboot </font>
		</p>
		<p> </p>
		<p>◆ 安装和登录命令：login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last； </p>
		<p>◆ 文件处理命令：file、mkdir、grep、dd、find、mv、ls、diff、cat、ln； </p>
		<p>◆ 系统管理相关命令：df、top、free、quota、at、lp、adduser、groupadd、kill、crontab； </p>
		<p>◆ 网络操作命令：ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup； </p>
		<p>◆ 系统安全相关命令：passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who； </p>
		<p>◆ 其它命令：tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。 </p>
		<p>本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例，介绍Linux下的安装和登录命令。 </p>
		<p>login </p>
		<p>1.作用 </p>
		<p>login的作用是登录系统，它的使用权限是所有用户。 </p>
		<p>2.格式 </p>
		<p>login [name][－p ][－h 主机名称]</p>
		<p>
		</p>
		<p>3.主要参数 </p>
		<p>－p:通知login保持现在的环境参数。 </p>
		<p>－h:用来向远程登录的之间传输用户名。 </p>
		<p>如果选择用命令行模式登录Linux的话，那么看到的第一个Linux命令就是login：。 </p>
		<p>一般界面是这样的： </p>
		<p>Manddrake Linux release 9.1(Bamboo) for i586 <br />renrel 2.4.21－0.13mdk on i686 / tty1<br />localhost login:root<br />password:</p>
		<p>
		</p>
		<p>上面代码中，第一行是Linux发行版本号，第二行是内核版本号和登录的虚拟控制台，我们在第三行输入登录名，按“Enter”键在Password后输入账户密码，即可登录系统。出于安全考虑，输入账户密码时字符不会在屏幕上回显，光标也不移动。 </p>
		<p>登录后会看到下面这个界面（以超级用户为例）： </p>
		<p>[root@localhost root]#<br />last login:Tue ,Nov 18 10:00:55 on vc/1</p>
		<p>
		</p>
		<p>上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 </p>
		<p>4.应用技巧 </p>
		<p>Linux是一个真正的多用户操作系统，可以同时接受多个用户登录，还允许一个用户进行多次登录。这是因为Linux和许多版本的Unix一样，提供了虚拟控制台的访问方式，允许用户在同一时间从控制台（系统的控制台是与系统直接相连的监视器和键盘）进行多次登录。每个虚拟控制台可以看作是一个独立的工作站，工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实现，通常使用F1-F6 。 </p>
		<p>例如，用户登录后，按一下“Alt+F2”键，用户就可以看到上面出现的“login:”提示符，说明用户看到了第二个虚拟控制台。然后只需按“Alt+F1”键，就可以回到第一个虚拟控制台。 一个新安装的Linux系统允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。虚拟控制台最有用的是，当一个程序出错造成系统死锁时，可以切换到其它虚拟控制台工作，关闭这个程序。 </p>
		<p>shutdown </p>
		<p>1.作用 </p>
		<p>shutdown命令的作用是关闭计算机，它的使用权限是超级用户。 </p>
		<p>2.格式 </p>
		<p>shutdown [－h][－i][－k][－m][－t]</p>
		<p>
		</p>
		<p>3.重要参数 </p>
		<p>－t：在改变到其它运行级别之前，告诉init程序多久以后关机。 </p>
		<p>－k：并不真正关机，只是送警告信号给每位登录者。 </p>
		<p>－h：关机后关闭电源。 </p>
		<p>－c：cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数，但是可以输入一个用来解释的讯息，而这信息将会送到每位使用者。 </p>
		<p>－F：在重启计算机时强迫fsck。 </p>
		<p>－time：设定关机前的时间。 </p>
		<p>－m: 将系统改为单用户模式。 </p>
		<p>－i：关机时显示系统信息。 </p>
		<p>4.命令说明 </p>
		<p>shutdown命令可以安全地将系统关机。有些用户会使用直接断掉电源的方式来关闭Linux系统，这是十分危险的。因为Linux与Windows不同，其后台运行着许多进程，所以强制关机可能会导致进程的数据丢失，使系统处于不稳定的状态，甚至在有的系统中会损坏硬件设备（硬盘）。在系统关机前使用shutdown命令，系统管理员会通知所有登录的用户系统将要关闭，并且login指令会被冻结，即新的用户不能再登录。 </p>
		<p>halt </p>
		<p>1.作用 </p>
		<p>halt命令的作用是关闭系统，它的使用权限是超级用户。 </p>
		<p>2.格式 </p>
		<p>halt [－n] [－w] [－d] [－f] [－i] [－p]</p>
		<p>
		</p>
		<p>3.主要参数说明 </p>
		<p>－n：防止sync系统调用，它用在用fsck修补根分区之后，以阻止内核用老版本的超级块覆盖修补过的超级块。 </p>
		<p>－w：并不是真正的重启或关机,只是写wtmp（/var/log/wtmp）纪录。 </p>
		<p>－f：没有调用shutdown，而强制关机或重启。 </p>
		<p>－i：关机（或重启）前，关掉所有的网络接口。 </p>
		<p>－f：强迫关机，不呼叫shutdown这个指令。 </p>
		<p>－p: 当关机的时候顺便做关闭电源的动作。 </p>
		<p>－d：关闭系统，但不留下纪录。　 </p>
		<p>4.命令说明 </p>
		<p>halt就是调用shutdown －h。halt执行时，杀死应用进程，执行sync(将存于buffer中的资料强制写入硬盘中)系统调用，文件系统写操作完成后就会停止内核。若系统的运行级别为0或6，则关闭系统；否则以shutdown指令（加上－h参数）来取代。　 </p>
		<p>reboot </p>
		<p>1.作用 </p>
		<p>reboot命令的作用是重新启动计算机，它的使用权限是系统管理者。 </p>
		<p>2.格式 </p>
		<p>reboot [－n] [－w] [－d] [－f] [－i]</p>
		<p>
		</p>
		<p>3.主要参数 </p>
		<p>－n: 在重开机前不做将记忆体资料写回硬盘的动作。 </p>
		<p>－w: 并不会真的重开机，只是把记录写到/var/log/wtmp文件里。 </p>
		<p>－d: 不把记录写到/var/log/wtmp文件里（－n这个参数包含了－d）。 </p>
		<p>－i: 在重开机之前先把所有与网络相关的装置停止。 </p>
		<p>install </p>
		<p>1.作用 </p>
		<p>install命令的作用是安装或升级软件或备份数据，它的使用权限是所有用户。 </p>
		<p>2.格式 </p>
		<p>(1)install [选项]... 来源 目的地 </p>
		<p>(2)install [选项]... 来源... 目录 </p>
		<p>(3)install －d [选项]... 目录... </p>
		<p>在前两种格式中，会将&lt;来源&gt;复制至&lt;目的地&gt;或将多个&lt;来源&gt;文件复制至已存在的&lt;目录&gt;，同时设定权限模式及所有者/所属组。在第三种格式中，会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。 </p>
		<p>3.主要参数 </p>
		<p>－－backup[=CONTROL]：为每个已存在的目的地文件进行备份。 </p>
		<p>－b：类似 －－backup，但不接受任何参数。 </p>
		<p>－c：(此选项不作处理)。 </p>
		<p>－d，－－directory：所有参数都作为目录处理，而且会创建指定目录的所有主目录。 </p>
		<p>－D：创建&lt;目的地&gt;前的所有主目录，然后将&lt;来源&gt;复制至 &lt;目的地&gt;；在第一种使用格式中有用。 </p>
		<p>－g，－－group=组：自行设定所属组，而不是进程目前的所属组。 </p>
		<p>－m，－－mode=模式：自行设定权限模式 (像chmod)，而不是rwxr－xr－x。 </p>
		<p>－o，－－owner=所有者：自行设定所有者 (只适用于超级用户)。 </p>
		<p>－p，－－preserve－timestamps：以&lt;来源&gt;文件的访问/修改时间作为相应的目的地文件的时间属性。 </p>
		<p>－s，－－strip：用strip命令删除symbol table，只适用于第一及第二种使用格式。 </p>
		<p>－S，－－suffix=后缀：自行指定备份文件的&lt;后缀&gt;。 </p>
		<p>－v，－－verbose：处理每个文件/目录时印出名称。 </p>
		<p>－－help：显示此帮助信息并离开。 </p>
		<p>－－version：显示版本信息并离开。 </p>
		<p>mount </p>
		<p>1.作用 </p>
		<p>mount命令的作用是加载文件系统，它的用权限是超级用户或/etc/fstab中允许的使用者。 </p>
		<p>2.格式 </p>
		<p>mount －a [－fv] [－t vfstype] [－n] [－rw] [－F] device dir</p>
		<p>
		</p>
		<p>3.主要参数 </p>
		<p>－h：显示辅助信息。 </p>
		<p>－v：显示信息，通常和－f用来除错。 </p>
		<p>－a：将/etc/fstab中定义的所有文件系统挂上。 </p>
		<p>－F：这个命令通常和－a一起使用，它会为每一个mount的动作产生一个行程负责执行。在系统需要挂上大量NFS文件系统时可以加快加载的速度。 </p>
		<p>－f：通常用于除错。它会使mount不执行实际挂上的动作，而是模拟整个挂上的过程，通常会和－v一起使用。 </p>
		<p>－t vfstype：显示被加载文件系统的类型。 </p>
		<p>－n：一般而言，mount挂上后会在/etc/mtab中写入一笔资料，在系统中没有可写入文件系统的情况下，可以用这个选项取消这个动作。 </p>
		<p>4.应用技巧 </p>
		<p>在Linux和Unix系统上，所有文件都是作为一个大型树（以/为根）的一部分访问的。要访问CD-ROM上的文件，需要将CD-ROM设备挂装在文件树中的某个挂装点。如果发行版安装了自动挂装包，那么这个步骤可自动进行。在Linux中，如果要使用硬盘、光驱等储存设备 ，就得先将它加载，当储存设备挂上了之后，就可以把它当成一个目录来访问。挂上一个设备使用mount命令。 在使用mount这个指令时，至少要先知道下列三种信息：要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。 </p>
		<p>（1）Linux可以识别的文件系统 </p>
		<p>◆ Windows 95/98常用的FAT 32文件系统：vfat ； </p>
		<p>◆ Win NT/2000 的文件系统：ntfs ； </p>
		<p>◆ OS/2用的文件系统：hpfs； </p>
		<p>◆ Linux用的文件系统：ext2、ext3； </p>
		<p>◆ CD-ROM光盘用的文件系统：iso9660。 </p>
		<p>虽然vfat是指FAT 32系统，但事实上它也兼容FAT 16的文件系统类型。 </p>
		<p>（2）确定设备的名称 </p>
		<p>在Linux中，设备名称通常都存在/dev里。这些设备名称的命名都是有规则的，可以用“推理”的方式把设备名称找出来。例如，/dev/hda1这个IDE设备，hd是Hard Disk(硬盘)的，sd是SCSI Device，fd是Floppy Device(或是Floppy Disk?)。a代表第一个设备，通常IDE接口可以接上4个IDE设备(比如4块硬盘)。所以要识别IDE硬盘的方法分别就是hda、hdb、hdc、hdd。hda1中的“1”代表hda的第一个硬盘分区 (partition)，hda2代表hda的第二主分区，第一个逻辑分区从hda5开始，依此类推。 此外，可以直接检查/var/log/messages文件，在该文件中可以找到计算机开机后系统已辨认出来的设备代号。 </p>
		<p>（3）查找挂接点 </p>
		<p>在决定将设备挂接之前，先要查看一下计算机是不是有个/mnt的空目录，该目录就是专门用来当作挂载点(Mount Point)的目录。建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录，当作目录的专用挂载点。举例而言，如要挂载下列5个设备，其执行指令可能如下 (假设都是Linux的ext2系统，如果是Windows XX请将ext2改成vfat)： </p>
		<p>软盘 ===&gt;mount －t ext2 /dev/fd0 /mnt/floppy <br />cdrom ===&gt;mount －t iso9660 /dev/hdc /mnt/cdrom <br />SCSI cdrom ===&gt;mount －t iso9660 /dev/sdb /mnt/scdrom <br />SCSI cdr ===&gt;mount －t iso9660 /dev/sdc /mnt/scdr</p>
		<p>
		</p>
		<p>不过目前大多数较新的Linux发行版本（包括红旗 Linux、中软Linux、Mandrake Linux等）都可以自动挂装文件系统，但Red Hat Linux除外。 </p>
		<p>umount </p>
		<p>1.作用 </p>
		<p>umount命令的作用是卸载一个文件系统，它的使用权限是超级用户或/etc/fstab中允许的使用者。 </p>
		<p>2.格式 </p>
		<p>unmount －a [－fFnrsvw] [－t vfstype] [－n] [－rw] [－F] device dir</p>
		<p>
		</p>
		<p>3.使用说明 </p>
		<p>umount命令是mount命令的逆操作，它的参数和使用方法和mount命令是一样的。Linux挂装CD-ROM后，会锁定CD—ROM，这样就不能用CD-ROM面板上的Eject按钮弹出它。但是，当不再需要光盘时，如果已将/cdrom作为符号链接，请使用umount/cdrom来卸装它。仅当无用户正在使用光盘时，该命令才会成功。该命令包括了将带有当前工作目录当作该光盘中的目录的终端窗口。 </p>
		<p>chsh </p>
		<p>1.作用 </p>
		<p>chsh命令的作用是更改使用者shell设定，它的使用权限是所有使用者。 </p>
		<p>2.格式 </p>
		<p>chsh [ －s ] [ －list] [ －－help ] [ －v ] [ username ]</p>
		<p>
		</p>
		<p>3.主要参数 </p>
		<p>－l：显示系统所有Shell类型。 </p>
		<p>－v：显示Shell版本号。 </p>
		<p>4.应用技巧 </p>
		<p>前面介绍了Linux下有多种Shell，一般缺省的是Bash，如果想更换Shell类型可以使用chsh命令。先输入账户密码，然后输入新Shell类型，如果操作正确系统会显示“Shell change”。其界面一般如下： </p>
		<p>Changing fihanging shell for cao<br />Password: <br />New shell [/bin/bash]: /bin/tcsh</p>
		<p>
		</p>
		<p>上面代码中，[ ]内是目前使用的Shell。普通用户只能修改自己的Shell，超级用户可以修改全体用户的Shell。要想查询系统提供哪些Shell，可以使用chsh -l 命令，见图1所示。 </p>
		<p>
		</p>
		<p>
				<br />图1 系统可以使用的Shell类型 </p>
		<p>
		</p>
		<p>
				<br />从图1中可以看到，笔者系统中可以使用的Shell有bash（缺省）、csh、sh、tcsh四种。 </p>
		<p>exit </p>
		<p>1.作用 </p>
		<p>exit命令的作用是退出系统，它的使用权限是所有用户。 </p>
		<p>2.格式 </p>
		<p>exit </p>
		<p>3.参数 </p>
		<p>exit命令没有参数，运行后退出系统进入登录界面。 </p>
		<p>last </p>
		<p>1.作用 </p>
		<p>last命令的作用是显示近期用户或终端的登录情况，它的使用权限是所有用户。通过last命令查看该程序的log，管理员可以获知谁曾经或企图连接系统。 </p>
		<p>2.格式 </p>
		<p>1ast[—n][－f file][－t tty] [—h 节点][－I —IP][—1][－y][1D]</p>
		<p>
		</p>
		<p>3.主要参数 </p>
		<p>－n：指定输出记录的条数。 </p>
		<p>－f file：指定用文件file作为查询用的log文件。 </p>
		<p>－t tty：只显示指定的虚拟控制台上登录情况。 </p>
		<p>－h 节点：只显示指定的节点上的登录情况。 </p>
		<p>－i IP：只显示指定的IP上登录的情况。 </p>
		<p>－1：用IP来显示远端地址。 </p>
		<p>－y：显示记录的年、月、日。 </p>
		<p>－ID：知道查询的用户名。 </p>
		<p>－x:显示系统关闭、用户登录和退出的历史。 </p>
		<p>动手练习 </p>
		<p>上面介绍了Linux安装和登录命令，下面介绍几个实例，动手练习一下刚才讲过的命令。 </p>
		<p>1.一次运行多个命令 </p>
		<p>在一个命令行中可以执行多个命令，用分号将各个命令隔开即可，例如： </p>
		<p>＃last －x；halt</p>
		<p>
		</p>
		<p>上面代码表示在显示系统关闭、用户登录和退出的历史后关闭计算机。 </p>
		<p>2.利用mount挂装文件系统访问Windows系统 </p>
		<p>许多Linux发行版本现在都可以自动加载Vfat分区来访问Windows系统，而Red Hat各个版本都没有自动加载Vfat分区，因此还需要进行手工操作。 </p>
		<p>mount可以将Windows分区作为Linux的一个“文件”挂接到Linux的一个空文件夹下，从而将Windows的分区和/mnt这个目录联系起来。因此，只要访问这个文件夹就相当于访问该分区了。首先要在/mnt下建立winc文件夹，在命令提示符下输入下面命令： </p>
		<p>＃mount -t vfat /dev/hda1 /mnt/winc</p>
		<p>
		</p>
		<p>即表示将Windows的C分区挂到Liunx的/mnt/winc目录下。这时，在/mnt/winc目录下就可以看到Windows中C盘的内容了。使用类似的方法可以访问Windows系统的D、E盘。在Linux系统显示Windows的分区一般顺序这样的：hda1为C盘、hda5为D盘、hda6为E盘……以此类推。上述方法可以查看Windows系统有一个很大的问题，就是Windows中的所有中文文件名或文件夹名全部显示为问号“？”，而英文却可以正常显示。我们可以通过加入一些参数让它显示中文。还以上面的操作为例，此时输入命令： </p>
		<p>＃mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc</p>
		<p>
		</p>
		<p>现在它就可以正常显示中文了。 </p>
		<p>3.使用mount加挂闪盘上的文件系统 </p>
		<p>在Linux下使用闪盘非常简单。Linux对USB设备有很好的支持，当插入闪盘后，闪盘被识别为一个SCSI盘，通常输入以下命令： </p>
		<p>＃ mount /dev/sda1 /usb</p>
		<p>
		</p>
		<p>就能够加挂闪盘上的文件系统。 </p>
		<p>小知识 </p>
		<p>Linux命令与Shell </p>
		<p>所谓Shell，就是命令解释程序，它提供了程序设计接口，可以使用程序来编程。学习Shell对于Linux初学者理解Linux系统是非常重要的。Linux系统的Shell作为操作系统的外壳，为用户提供了使用操作系统的接口。Shell是命令语言、命令解释程序及程序设计语言的统称，是用户和Linux内核之间的接口程序。如果把Linux内核想象成一个球体的中心，Shell就是围绕内核的外层。当从Shell或其它程序向Linux传递命令时，内核会做出相应的反应。Shell在Linux系统的作用和MS DOS下的COMMAND.COM和Windows 95/98 的 explorer.exe相似。Shell虽然不是系统核心的一部分，只是系统核心的一个外延，但它能够调用系统内核的大部分功能。因此，可以说Shell是Unux/Linux最重要的实用程序。 </p>
		<p>Linux中的Shell有多种类型，其中最常用的是Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)。大多数Linux发行版本缺省的Shell是Bourne Again Shell，它是Bourne Shell的扩展，简称bash，与Bourne Shell完全向后兼容，并且在Bourne Shell的基础上增加了很多特性。bash放在/bin/bash中，可以提供如命令补全、命令编辑和命令历史表等功能。它还包含了很多C Shell和Korn Shell中的优点，有灵活和强大的编程接口，同时又有很友好的用户界面。Linux系统中200多个命令中有40个是bash的内部命令，主要包括exit、less、lp、kill、 cd、pwd、fc、fg等。</p>
<img src ="http://www.cnitblog.com/ffan/aggbug/7500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2006-03-11 21:45 <a href="http://www.cnitblog.com/ffan/archive/2006/03/11/7500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国大部分程序员的通病 [zt]</title><link>http://www.cnitblog.com/ffan/archive/2006/01/21/6278.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 21 Jan 2006 05:24:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2006/01/21/6278.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/6278.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2006/01/21/6278.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/6278.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/6278.html</trackback:ping><description><![CDATA[眼高，手低，知识面宽，深度浅；有自己的理想和目标，但实施的决心太小，还总闲工资太少，觉得老板太扣。于是总是“跳呀跳”。 <BR>还是让我们实实在在的干点儿事吧！！！ 
<P><BR>中国的大部分程序员都有一个通病不知大家有没有感觉到：眼高，手低，知识面宽，深度浅；有自己的理想和目标，但实施的决心太小，还总闲工资太少，觉得老板太扣。于是总是“跳呀跳”。（也许会让一些人骂，骂就骂吧，不过这是事实，当然，我说的那些程序员，是指一些人，不是所有的程序员们，由其是那些为中国软件产业做出贡献的人们，我感谢他们）。 </P>
<P><BR>人说，到国外作软件，中国的程序员最吃香，由其在国内干了几年的。为什么？中国的程序员懂得很多很多，而且，很能吃苦，在下班后还在学习和工作（当然，加班要给加班工资的），还可以节省培训费用（每天都在自我培训------不停的学习），能创造较大的利润空间。 <BR>为什么，同样是中国的程序员，在国内就不行呢？ </P>
<P><BR>有社会方面的原因，也有中国国情和长期形成的一种人才应用的问题。但最大的问题还是在程序员们。 </P>
<P><BR>君不见，国内的程序员们，在工作时间内，有多少时间给了工作（当然，我说的工作，不是人在单位就算工作，而是真正的工作，在为单位创造利润和价值。）。做程序员本身工作压力就大，这不假，但在国外工作的程序员的压力又有谁能体会呢，他们的工资是高一些，但他们的工作压力和工作时要有的工作效率，要比国内大几倍，甚至说大几十倍，都不算夸张的。 <BR>如果国内的程序员们，同样。也拿出与国外工作的程序员一样的精力和职业态度，那中国的软件帝国也会升起的。 </P>
<P><BR>我在国外工作的一个朋友说：他们每天上班时间，几乎没有说闲话的工夫；下班后为项目还要学习新东西。想学点自己的东西，没那时间。老外就是，一分钱要产生一分钱的效益。给你十元钱的工资，你就不能只做九元钱的活。想换工作，那你就得先辞职，才有时间去找新工作。</P>
<P><BR>听了他的话，我们国内又是个什么情况？我们都身临其境，不用我说，大家心里都明白着呢！！！ </P>
<P><BR>眼高，手低。都觉得自己是块料，都想做项目经理级的人物，都觉得自己可以做系统分析员，那程序谁来编。都觉得自己很“牛”。可象牛一样不记得失，肯塌心做事的人有几个。牛“牛气”是有本钱的，他们吃的是草，流出来的可是最有营养的“奶”，干的可是最累的活。你做了吗？你有这些本钱吗？如果你有，你可以“牛气、牛气”，没有人说你的。 </P>
<P><BR>我曾经，也是一个这样的人。牛，牛得很。可做了六七年IT，也没有做出点自己的东西，有什么可牛的。有什么理由，把眼珠放到头顶上去呢。充其量，也就是对别人做出的东西，用的比另一些人熟练而已；接触的东西比一些人多一些而已；别人不能解决的问题，我能解决而已；用别人做出的东西为某些人服务了一下而已。现在，吃得比别人好，喝的比别强，在公司里，老板说话也要看三分。可我又做出了点什么让自己满意的东西？没有。“没有”，就没有什么可牛的。 </P>
<P><BR>现在，我想通了，看透了。我也要让自己有“牛气”的资本。 </P>
<P><BR>上面的东西，只是我个人的一点看法，说话没有把门的，如果触着那位的“心”了，请原谅，我非有心的。我只是想让大家实实在在的干点儿事。但也不是说，人人都去做研究。研究出来了，还得有人用吧。现在讲的就是服务，那就好好用别人的东西为人民服务吧！这也是一种幸福。你会在为别人服务中，体会到你的价值和生活的意义的。 </P><img src ="http://www.cnitblog.com/ffan/aggbug/6278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2006-01-21 13:24 <a href="http://www.cnitblog.com/ffan/archive/2006/01/21/6278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么样的环境是程序员成长最快的环境 [zt]</title><link>http://www.cnitblog.com/ffan/archive/2006/01/21/6277.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 21 Jan 2006 05:23:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2006/01/21/6277.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/6277.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2006/01/21/6277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/6277.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/6277.html</trackback:ping><description><![CDATA[<P>除开五大这种要什么有什么，进去做打字也能光耀门楣的不谈。如果是嫁到一个普通软件公司，怎样的环境能使你最快的成长呢？<BR><BR>　　首先基本的公司项目管理水平是必要的；<BR><BR>　　其次稳健而不保守的公司技术选型是必要的;<BR><BR>　　重要的，要有一个严苛的环境，那些古训说的都没错，越是严苛成长越快。<BR><BR>　　然后有些助力，让你在严寒中节省体力，过得好些的，就是最佳的练功环境了。<BR><BR>　　<STRONG>一，最复杂多变的业务规则，最难侍候的客户<BR><BR></STRONG>　　大多数人碰上这几样东西都是愁眉苦脸，天天抱怨，其实应该把它视为入门锻炼的：<BR>　　第一阶是努力用细密的编码迎合复杂的业务，以金牌的服务态度接受客户的善变和每样需求都要24小时有取的限时。充分打磨之后的眼耳口心，才是个合格的IT人。如果业务规则都清的像水，项目时时都是以我为主的，反是在做toy application，不算入了IT的门。<BR><BR>　　而如果被充分打磨之后，肯静下心来总结，设计架构如何适应改变，流程如何做到快速更新部署，并抽时间改进的，就是第二阶段的进步了。<BR><BR>　　一直做ERP，自问有足够复杂的业务(因为不熟悉业务，有些不复杂的也变复杂了)和麻烦的客户(不是大公司，麻烦的客户就会很充足)，但觉得在第二阶段方面还是不很静得下心。<BR><BR>　<STRONG>　二，最严格的性能要求，准确率要求，错误恢复要求<BR></STRONG><BR>　　最好是那种每天N万人访问，几亿条数据。还有准确性很严格，分分钟几十万上下，如果崩机又要迅速完全恢复状态的项目。<BR><BR>　　每天几万人访问的项目没做过，遗憾。<BR><BR>　　几千万条数据的项目倒是每天面对，优化学了一点，但没有充分利用严格的环境去追求改进，遗憾。<BR><BR>　　ERP的报表倒是经常会搞到几十万上下的差额，但一直重视不足，以后要以历练来对待之。<BR><BR>　　崩机恢复是最近的项目要求，更爽是这个项目澳国政府居然有一份规范，我说的助力就是指这些了，不用自己慢慢摸索而且经常摸错地方。</P>
<P><STRONG>三，最底层的编码<BR></STRONG><BR>　　不要老是高高在上搞ERP搞.com，最好能用到起码C一级的语言，可以和硬件打打交道，直接写IO口阿，中断阿，都是有就不要放过的锻炼。<BR><BR>　　没做过底层编码，只会纯软件的IT人的感觉是不完整的。<BR><BR>　　刚好公司最近的项目有要求，捧一本看看〈Linux Device Driver〉。<BR><BR>　　<STRONG>四，最高层的设计<BR><BR></STRONG>　　设计，框架--多少技术人一听就眼红的字眼。但不是每个公司都搞很产品化的项目，或者在项目里自写框架重做轮子。所以，除了刚入行那段疯狂的日子，很高阶的设计其实我也没做多少，多数时间都是应用层的开发。<BR><BR>　　不过，因为有时候要除bug或者增强开源产品使其符合项目需求，或者有错了不明就里时直接读源码会更快找到错误。这样就接触到不少优秀开源项目的源码，像很好读的Spring。<BR><BR>　　而最近搞php的东西时，发现php早不一样了，其实应该算入python,ruby一类的动态OO语言，它的那些著名项目一样有着很好的MVC框架和数据层抽象，而且，和Java盛产框架型项目不同，php的项目多是熟透了的Web应用，细看之下学到不少东西。<BR>　　<BR>　　一阵发呆打了这篇字，其实也是鞭策自己在现在的环境里更快成长。</P>
<P>&nbsp;</P><img src ="http://www.cnitblog.com/ffan/aggbug/6277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2006-01-21 13:23 <a href="http://www.cnitblog.com/ffan/archive/2006/01/21/6277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用正则表达式</title><link>http://www.cnitblog.com/ffan/archive/2006/01/21/6276.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 21 Jan 2006 02:44:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2006/01/21/6276.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/6276.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2006/01/21/6276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/6276.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/6276.html</trackback:ping><description><![CDATA[<P>"^\d+$"　　//非负整数（正整数 + 0） </P>
<P>"^[0-9]*[1-9][0-9]*$"　　//正整数 </P>
<P>"^((-\d+)|(0+))$"　　//非正整数（负整数 + 0） </P>
<P>"^-[0-9]*[1-9][0-9]*$"　　//负整数 </P>
<P>"^-?\d+$"　　　　//整数 </P>
<P>"^\d+(\.\d+)?$"　　//非负浮点数（正浮点数 + 0） </P>
<P>"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"　　//正浮点数 </P>
<P>"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"　　//非正浮点数（负浮点数 + 0） </P>
<P>"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"　　//负浮点数 </P>
<P>"^(-?\d+)(\.\d+)?$"　　//浮点数 </P>
<P>"^[A-Za-z]+$"　　//由26个英文字母组成的字符串 </P>
<P>"^[A-Z]+$"　　//由26个英文字母的大写组成的字符串 </P>
<P>"^[a-z]+$"　　//由26个英文字母的小写组成的字符串 </P>
<P>"^[A-Za-z0-9]+$"　　//由数字和26个英文字母组成的字符串 </P>
<P>"^\w+$"　　//由数字、26个英文字母或者下划线组成的字符串 </P>
<P>"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"　　　　//email地址 </P>
<P>"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"　　//url </P><img src ="http://www.cnitblog.com/ffan/aggbug/6276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2006-01-21 10:44 <a href="http://www.cnitblog.com/ffan/archive/2006/01/21/6276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript:回车提交表单</title><link>http://www.cnitblog.com/ffan/archive/2005/10/07/3106.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Fri, 07 Oct 2005 03:12:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/10/07/3106.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/3106.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/10/07/3106.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/3106.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/3106.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">INPUT&nbsp;</SPAN><SPAN style="COLOR: #ff0000">TYPE</SPAN><SPAN style="COLOR: #0000ff">=text&nbsp;</SPAN><SPAN style="COLOR: #ff0000">NAME</SPAN><SPAN style="COLOR: #0000ff">="hanbai_cd"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;SIZE</SPAN><SPAN style="COLOR: #0000ff">=20&nbsp;</SPAN><SPAN style="COLOR: #ff0000">maxlength&nbsp;</SPAN><SPAN style="COLOR: #0000ff">=&nbsp;8&nbsp;</SPAN><SPAN style="COLOR: #ff0000">onkeydown</SPAN><SPAN style="COLOR: #0000ff">=KeyDown()</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">function</SPAN><SPAN style="COLOR: #000000">&nbsp;KeyDown()<BR><IMG id=Codehighlighter1_19_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_19_157_Open_Text.style.display='none'; Codehighlighter1_19_157_Closed_Image.style.display='inline'; Codehighlighter1_19_157_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_19_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_157_Closed_Text.style.display='none'; Codehighlighter1_19_157_Open_Image.style.display='inline'; Codehighlighter1_19_157_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_19_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_19_157_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(event.keyCode&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">13</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_54_155_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_155_Open_Text.style.display='none'; Codehighlighter1_54_155_Closed_Image.style.display='inline'; Codehighlighter1_54_155_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_54_155_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_155_Closed_Text.style.display='none'; Codehighlighter1_54_155_Open_Image.style.display='inline'; Codehighlighter1_54_155_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_54_155_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_54_155_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnValue</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.cancel&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form1.btnsubmit.click();<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><img src ="http://www.cnitblog.com/ffan/aggbug/3106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-10-07 11:12 <a href="http://www.cnitblog.com/ffan/archive/2005/10/07/3106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>匈牙利命名规范</title><link>http://www.cnitblog.com/ffan/archive/2005/09/21/2815.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Wed, 21 Sep 2005 07:22:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/09/21/2815.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/2815.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/09/21/2815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/2815.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/2815.html</trackback:ping><description><![CDATA[<P>几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.</P>
<P>&nbsp;</P>
<P>这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字.</P>
<P>&nbsp;</P>
<P>因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起.</P>
<P>对于30行以下的函数，匈牙利方法一般有优势。</P>
<P>尤其是对界面编程，有优势。</P>
<P>但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序，匈牙利方法简直是一个灾难。</P>
<P>看你用在什么地方。</P>
<P>现在有了很好的IDE工具,如:VC,SourceInsight等.</P>
<P>选中变量,会自动提示告诉你它的声明和定义,这样</P>
<P>匈牙利命名法就没有很大的必要了.</P>
<P>无非就是为了程序可读性较好.</P>
<P>实际上良好的代码书写习惯比强制使用匈牙利命名法更重要.</P>
<P>系统性。整体性。可读性。分类要清楚。要有注释！</P>
<P>&nbsp;</P>
<P>匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是：在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的，结果它在微软内部逐渐流行起来，并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法，后面的例子里也会尽量遵守它和上面的代码风格。还是那句话，并不是要求所有的读者都要去遵守，但是希望读者作为一个现代的软件开发人员都去遵守它。</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Array&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数组</P>
<P>&nbsp; b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL (int)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 布尔(整数)</P>
<P>&nbsp; by&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unsigned Char (Byte)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号字符(字节)</P>
<P>&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符(字节)</P>
<P>&nbsp; cb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Count of bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字节数</P>
<P>&nbsp; cr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color reference value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 颜色(参考)值</P>
<P>&nbsp; cx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Count of x (Short)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x的集合(短整数)</P>
<P>&nbsp; dw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp; (unsigned long)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 双字(无符号长整数)</P>
<P>&nbsp; f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags&nbsp;&nbsp; (usually multiple bit values)&nbsp;&nbsp; 标志(一般是有多位的数值)</P>
<P>&nbsp; fn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数</P>
<P>&nbsp; g_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; global&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局的</P>
<P>&nbsp; h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Handle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 句柄</P>
<P>&nbsp; i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整数</P>
<P>&nbsp; l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 长整数</P>
<P>&nbsp; lp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Long pointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 长指针</P>
<P>&nbsp; m_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Data member of a class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个类的数据成员</P>
<P>&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 短整数</P>
<P>&nbsp; p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指针</P>
<P>&nbsp; s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串</P>
<P>&nbsp; sz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Zero terminated String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以0结尾的字符串</P>
<P>&nbsp; tm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text metric&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文本规则</P>
<P>&nbsp; u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号整数</P>
<P>&nbsp; ul&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unsigned long (ULONG)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号长整数</P>
<P>&nbsp; w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD (unsigned short)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号短整数</P>
<P>&nbsp; x,y&nbsp;&nbsp;&nbsp;&nbsp; x, y coordinates (short)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 坐标值/短整数</P>
<P>&nbsp; v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 空</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>有关项目的全局变量用g_开始，类成员变量用m_，局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。</P>
<P>&nbsp;</P>
<P>前缀&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子</P>
<P>g_&nbsp;&nbsp;&nbsp; 全局变量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_Servers</P>
<P>C&nbsp;&nbsp;&nbsp;&nbsp; 类或者结构体&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDocument，CPrintInfo</P>
<P>m_&nbsp;&nbsp; 成员变量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pDoc，m_nCustomers</P>
<P>&nbsp;</P>
<P>VC常用前缀列表：</P>
<P>&nbsp;</P>
<P>前缀&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子</P>
<P>ch&nbsp;&nbsp;&nbsp; char 8位字符&nbsp;&nbsp;&nbsp; chGrade</P>
<P>ch&nbsp;&nbsp;&nbsp; TCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16位UNICODE类型字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chName</P>
<P>b&nbsp;&nbsp;&nbsp;&nbsp; BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 布尔变量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bEnabled</P>
<P>n&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; 整型（其大小由操作系统决定）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nLength</P>
<P>n&nbsp;&nbsp;&nbsp;&nbsp; UINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号整型（其大小由操作系统决定）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nLength</P>
<P>w&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16位无符号整型&nbsp;&nbsp;&nbsp; wPos</P>
<P>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32位有符号整型&nbsp;&nbsp;&nbsp; lOffset</P>
<P>dw&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32位无符号整型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwRange</P>
<P>p&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ambient memory model pointer 内存模块指针，指针变量&nbsp;&nbsp;&nbsp; pDoc</P>
<P>lp&nbsp;&nbsp;&nbsp;&nbsp; FAR*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 长指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpDoc</P>
<P>lpsz&nbsp; LPSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32位字符串指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszName</P>
<P>lpsz&nbsp; LPCSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32位常量字符串指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszName</P>
<P>lpsz&nbsp; LPCTSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32位UNICODE类型常量指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszName</P>
<P>h&nbsp;&nbsp;&nbsp;&nbsp; handle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows对象句柄&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hWnd</P>
<P>lpfn&nbsp; (*fn)()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回调函数指针 Callback Far pointer to CALLBACK function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpfnAbort</P>
<P>&nbsp;</P>
<P>Windows对象名称缩写：</P>
<P>&nbsp;</P>
<P>Windows对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子变量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MFC类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子对象</P>
<P>HWND&nbsp;&nbsp;&nbsp; hWnd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CWnd*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWnd;</P>
<P>HDLG&nbsp;&nbsp;&nbsp;&nbsp; hDlg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDialog*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDlg;</P>
<P>HDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDC*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDC;</P>
<P>HGDIOBJ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hGdiObj;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CGdiObject*&nbsp;&nbsp;&nbsp;&nbsp; pGdiObj;</P>
<P>HPEN&nbsp;&nbsp;&nbsp;&nbsp; hPen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPen*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPen; </P>
<P>HBRUSH hBrush;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBrush*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBrush; </P>
<P>HFONT&nbsp;&nbsp; hFont;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFont*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pFont; </P>
<P>HBITMAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hBitmap;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBitmap*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBitmap; </P>
<P>HPALETTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hPalette;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPalette*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPalette; </P>
<P>HRGN&nbsp;&nbsp;&nbsp;&nbsp; hRgn;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRgn*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRgn; </P>
<P>HMENU hMenu;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMenu*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pMenu; </P>
<P>HWND&nbsp;&nbsp;&nbsp; hCtl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CStatic*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pStatic; </P>
<P>HWND&nbsp;&nbsp;&nbsp; hCtl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CButton*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBtn;</P>
<P>HWND&nbsp;&nbsp;&nbsp; hCtl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CEdit*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pEdit; </P>
<P>HWND&nbsp;&nbsp;&nbsp; hCtl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CListBox*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pListBox;</P>
<P>HWND&nbsp;&nbsp;&nbsp; hCtl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CComboBox*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pComboBox;</P><img src ="http://www.cnitblog.com/ffan/aggbug/2815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-09-21 15:22 <a href="http://www.cnitblog.com/ffan/archive/2005/09/21/2815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript小技巧</title><link>http://www.cnitblog.com/ffan/archive/2005/09/14/2663.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Wed, 14 Sep 2005 07:48:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/09/14/2663.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/2663.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/09/14/2663.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/2663.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/2663.html</trackback:ping><description><![CDATA[事件源对象 <BR><PRE class=CodeSamp>event.srcElement.tagName 
event.srcElement.type 
</PRE><BR>捕获释放 <BR><PRE class=CodeSamp>event.srcElement.setCapture();  
event.srcElement.releaseCapture();
</PRE><BR>事件按键<BR><PRE class=CodeSamp> 
event.keyCode 
event.shiftKey 
event.altKey 
event.ctrlKey 
</PRE><BR>事件返回值<BR><PRE class=CodeSamp> 
event.returnValue 
</PRE><BR>鼠标位置 <BR>event.x <BR>event.y <BR>窗体活动元素 <BR>document.activeElement <BR>绑定事件<BR><PRE class=CodeSamp> 
document.captureEvents(Event.KEYDOWN); 
</PRE><BR>访问窗体元素 <BR><PRE class=CodeSamp>document.all("txt").focus(); 
document.all("txt").select(); 
</PRE><BR>窗体命令 <BR>document.execCommand <BR>窗体COOKIE <BR>document.cookie <BR>菜单事件 <BR>document.oncontextmenu <BR>创建元素 <BR><PRE class=CodeSamp>document.createElement("SPAN"); 
</PRE><BR>根据鼠标获得元素：<BR><PRE class=CodeSamp> 
document.elementFromPoint(event.x,event.y).tagName=="TD 
document.elementFromPoint(event.x,event.y).appendChild(ms)
</PRE><BR>窗体图片 <BR>document.images[索引] <BR>窗体事件绑定 <BR>document.onmousedown=scrollwindow; <BR>元素 <BR>document.窗体.elements[索引] <BR>对象绑定事件 <BR><PRE class=CodeSamp>document.all.xxx.detachEvent('onclick',a); 
</PRE><BR>插件数目 <BR>navigator.plugins <BR>取变量类型<BR><PRE class=CodeSamp> 
typeof($js_libpath) == "undefined" 
</PRE><BR>下拉框 <BR>下拉框.options[索引] <BR>下拉框.options.length <BR>查找对象 <BR><PRE class=CodeSamp>document.getElementsByName("r1"); 
document.getElementById(id); 
</PRE><BR>定时 <BR><PRE class=CodeSamp>timer=setInterval('scrollwindow()',delay); 
clearInterval(timer); 
</PRE><BR>UNCODE编码 <BR>escape() ,unescape <BR>父对象 <BR><PRE class=CodeSamp>obj.parentElement(dhtml) 
obj.parentNode(dom)
</PRE><BR>交换表的行<BR><PRE class=CodeSamp> 
TableID.moveRow(2,1) 
</PRE><BR>替换CSS <BR>document.all.csss.href = "a.css"; <BR>并排显示 <BR>display:inline <BR>隐藏焦点 <BR>hidefocus=true <BR>根据宽度换行 <BR>style="word-break:break-all" <BR>自动刷新 <BR>&lt;meta HTTP-EQUIV="refresh" CONTENT="8;URL=http://c98.yeah.net"&gt; <BR>简单邮件 <BR>&lt;a href="mailto:aaa@bbb.com?subject=ccc&amp;body=xxxyyy"&gt; <BR>快速转到位置 <BR>obj.scrollIntoView(true) <BR>锚 <BR>&lt;a name="first"&gt; <BR>&lt;a href="#first"&gt;anchors&lt;/a&gt; <BR>网页传递参数<BR><PRE class=CodeSamp> 
location.search();
</PRE><BR>可编辑 <BR>obj.contenteditable=true <BR>执行菜单命令 <BR>obj.execCommand <BR>双字节字符 <BR>/[^\x00-\xff]/ <BR>汉字 <BR>/[\u4e00-\u9fa5]/ <BR>让英文字符串超出表格宽度自动换行 <BR>word-wrap: break-word; word-break: break-all; <BR>透明背景 <BR>&lt;IFRAME src="1.htm" width=300 height=180 allowtransparency&gt;&lt;/iframe&gt; <BR>获得style内容 <BR>obj.style.cssText <BR>HTML标签 <BR>document.documentElement.innerHTML <BR>第一个style标签 <BR>document.styleSheets[0] <BR>style标签里的第一个样式 <BR>document.styleSheets[0].rules[0] <BR>防止点击空链接时，页面往往重置到页首端。<BR><PRE class=CodeSamp> 
&lt;a href="javascript:function()"&gt;word&lt;/a&gt; 
上一网页源 
asp: 
request.servervariables("HTTP_REFERER") 
javascript: 
document.referrer 
</PRE><BR>释放内存<BR><PRE class=CodeSamp> 
CollectGarbage();
</PRE><BR>禁止右键 <BR><PRE class=CodeSamp>document.oncontextmenu = function() { return false;} 
</PRE><BR>禁止保存 <BR><PRE class=CodeSamp>&lt;noscript&gt;&lt;iframe src="*.htm"&gt;&lt;/iframe&gt;&lt;/noscript&gt;
</PRE><BR>禁止选取<BR><PRE class=CodeSamp>&lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false"onmouseup="document.selection.empty()&gt; 
</PRE><BR>禁止粘贴<BR><PRE class=CodeSamp> 
&lt;input type=text onpaste="return false"&gt; 
</PRE><BR>地址栏图标 <BR><PRE class=CodeSamp>&lt;link rel="Shortcut Icon" href="favicon.ico"&gt;
</PRE><BR>favicon.ico 名字最好不变16*16的16色,放虚拟目录根目录下 <BR>收藏栏图标 <BR><PRE class=CodeSamp>&lt;link rel="Bookmark" href="favicon.ico"&gt; 
</PRE><BR>查看源码<BR><PRE class=CodeSamp> 
&lt;input type=button value=查看网页源代码 onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'"&gt;
</PRE><BR>关闭输入法<BR><PRE class=CodeSamp> 
&lt;input style="ime-mode:disabled"&gt; 
</PRE><BR>自动全选<BR><PRE class=CodeSamp> 
&lt;input type=text name=text1 value="123" onfocus="this.select()"&gt; 
</PRE><BR>ENTER键可以让光标移到下一个输入框<BR><PRE class=CodeSamp> 
&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt;
</PRE><BR>文本框的默认值<BR><PRE class=CodeSamp> 
&lt;input type=text value="123" onfocus="alert(this.defaultValue)"&gt; 
</PRE><BR>title换行<BR><PRE class=CodeSamp> 
obj.title = "123&amp;#13sdfs&amp;#32" 
</PRE><BR>获得时间所代表的微秒 <BR><PRE class=CodeSamp>var n1 = new Date("2004-10-10".replace(/-/g, "\/")).getTime() 
</PRE><BR>窗口是否关闭 <BR><PRE class=CodeSamp>win.closed 
</PRE><BR>checkbox扁平<BR><PRE class=CodeSamp> 
&lt;input type=checkbox style="position: absolute; clip:rect(5px 15px 15px 5px)"&gt; 
</PRE><BR>获取选中内容 <BR><PRE class=CodeSamp>document.selection.createRange().duplicate().text
</PRE><BR>自动完成功能<BR><PRE class=CodeSamp> 
&lt;input  type=text  autocomplete=on&gt;打开该功能  
&lt;input  type=text  autocomplete=off&gt;关闭该功能 
</PRE><BR>窗口最大化 <BR><PRE class=CodeSamp>&lt;body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);window.moveTo(-4,-4)"&gt; 
</PRE><BR>无关闭按钮IE<BR><PRE class=CodeSamp> 
window.open("aa.htm", "meizz", "fullscreen=7"); 
</PRE><BR>统一编码/解码<BR><PRE class=CodeSamp> 
alert(decodeURIComponent(encodeURIComponent("http://你好.com?as= hehe"))) 
encodeURIComponent对":"、"/"、";" 和 "?"也编码 
</PRE><BR>表格行指示<BR><PRE class=CodeSamp> 
&lt;tr onmouseover="this.bgColor='#f0f0f0'" onmouseout="this.bgColor='#ffffff'"&gt; 
</PRE><BR>//各种尺寸 <BR><PRE class=CodeSamp>s  +=  "\r\n网页可见区域宽："+  document.body.clientWidth;   
s  +=  "\r\n网页可见区域高："+  document.body.clientHeight;   
s  +=  "\r\n网页可见区域高："+  document.body.offsetWeight  +"  (包括边线的宽)";   
s  +=  "\r\n网页可见区域高："+  document.body.offsetHeight  +"  (包括边线的宽)";   
s  +=  "\r\n网页正文全文宽："+  document.body.scrollWidth;   
s  +=  "\r\n网页正文全文高："+  document.body.scrollHeight;   
s  +=  "\r\n网页被卷去的高："+  document.body.scrollTop;   
s  +=  "\r\n网页被卷去的左："+  document.body.scrollLeft;   
s  +=  "\r\n网页正文部分上："+  window.screenTop;   
s  +=  "\r\n网页正文部分左："+  window.screenLeft;   
s  +=  "\r\n屏幕分辨率的高："+  window.screen.height;   
s  +=  "\r\n屏幕分辨率的宽："+  window.screen.width;   
s  +=  "\r\n屏幕可用工作区高度："+  window.screen.availHeight;   
s  +=  "\r\n屏幕可用工作区宽度："+  window.screen.availWidth; 
</PRE><BR>//过滤数字 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;input type=text onkeypress="return event.keyCode&gt;=48&amp;&amp;event.keyCode&lt;=57||(this.value.indexOf('.')&lt;0?event.keyCode==46:false)" onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false"&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//特殊用途 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;input type=button value=导入收藏夹 onclick="window.external.ImportExportFavorites(true,'http://localhost');"&gt; 
&lt;input type=button value=导出收藏夹 onclick="window.external.ImportExportFavorites(false,'http://localhost');"&gt; 
&lt;input type=button value=整理收藏夹 onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)"&gt; 
&lt;input type=button value=语言设置   onclick="window.external.ShowBrowserUI('LanguageDialog', null)"&gt; 
&lt;input type=button value=加入收藏夹 onclick="window.external.AddFavorite('http://www.google.com/', 'google')"&gt; 
&lt;input type=button value=加入到频道 onclick="window.external.addChannel('http://www.google.com/')"&gt; 
&lt;input type=button value=加入到频道 onclick="window.external.showBrowserUI('PrivacySettings',null)"&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//不缓存 <BR><PRE class=CodeSamp>&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt; 
&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt; 
&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt; 
</PRE><BR>//正则匹配 <BR><PRE class=CodeSamp>匹配中文字符的正则表达式： [\u4e00-\u9fa5] 
匹配双字节字符(包括汉字在内)：[^\x00-\xff] 
匹配空行的正则表达式：\n[\s| ]*\r 
匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/  
匹配首尾空格的正则表达式：(^\s*)|(\s*$)（像vbscript那样的trim函数） 
匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
匹配网址URL的正则表达式：http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)? 
</PRE><BR>以下是例子： <BR>利用正则表达式限制网页表单里的文本框输入内容：<BR><PRE class=CodeSamp> 
用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" 
1.用正则表达式限制只能输入全角字符： onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" 
2.用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 
3.用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 
</PRE><BR>//消除图像工具栏 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;IMG SRC="mypicture.jpg" HEIGHT="100px" WIDTH="100px" GALLERYIMG="false"&gt;  
or 
&lt;head&gt; 
&lt;meta http-equiv="imagetoolbar" content="no"&gt; 
&lt;/head&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//无提示关闭 <BR><BR><PRE class=CodeSamp>function Close() 
{ 
 var ua=navigator.userAgent 
 var ie=navigator.appName=="Microsoft Internet Explorer"?true:false 
 if(ie) 
 { 
      var IEversion=parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE ")))) 
  if(IEversion&lt; 5.5) 
  { 
   var str  = '&lt;object id=noTipClose classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;' 
       str += '&lt;param name="Command" value="Close"&gt;&lt;/object&gt;'; 
       document.body.insertAdjacentHTML("beforeEnd", str); 
       document.all.noTipClose.Click(); 
  } 
      else 
  { 
       window.opener =null; 
       window.close(); 
      } 
   } 
 else 
 { 
  window.close() 
   } 
}
</PRE><BR>//取得控件得绝对位置(1) <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language="javascript"&gt;  
function getoffset(e) 
{  
 var t=e.offsetTop;  
 var l=e.offsetLeft;  
 while(e=e.offsetParent) 
 {  
  t+=e.offsetTop;  
  l+=e.offsetLeft;  
 }  
 var rec = new Array(1); 
 rec[0]  = t; 
 rec[1] = l; 
 return rec 
}  
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//获得控件的绝对位置(2) <BR><PRE class=CodeSamp>oRect = obj.getBoundingClientRect(); 
oRect.left 
oRect. 
</PRE><BR>//最小化,最大化,关闭 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;object id=min classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;  
&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt;  
&lt;object id=max classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;  
&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt;  
&lt;OBJECT id=close classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt;  
&lt;PARAM NAME="Command" value="Close"&gt;&lt;/OBJECT&gt;  
&lt;input type=button value=最小化 onclick=min.Click()&gt;  
&lt;input type=button value=最大化 onclick=max.Click()&gt;  
&lt;input type=button value=关闭 onclick=close.Click()&gt;  
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//光标停在文字最后 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language="javascript"&gt; 
function cc() 
{ 
 var e = event.srcElement; 
 var r =e.createTextRange(); 
 r.moveStart('character',e.value.length); 
 r.collapse(true); 
 r.select(); 
} 
&lt;/script&gt; 
&lt;input type=text name=text1 value="123" onfocus="cc()"&gt;
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR>//页面进入和退出的特效 <BR><BR><BR>进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"&gt; <BR>推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"&gt; <BR>这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使 <BR>用哪种特效，取值为1-23: <BR>　　0 矩形缩小 <BR>　　1 矩形扩大 <BR>　　2 圆形缩小 <BR>　　3 圆形扩大 <BR>　　4 下到上刷新 <BR>　　5 上到下刷新 <BR>　　6 左到右刷新 <BR>　　7 右到左刷新 <BR>　　8 竖百叶窗 <BR>　　9 横百叶窗 <BR>　　10 错位横百叶窗 <BR>　　11 错位竖百叶窗 <BR>　　12 点扩散 <BR>　　13 左右到中间刷新 <BR>　　14 中间到左右刷新 <BR>　　15 中间到上下 <BR>　　16 上下到中间 <BR>　　17 右下到左上 <BR>　　18 右上到左下 <BR>　　19 左上到右下 <BR>　　20 左下到右上 <BR>　　21 横条 <BR>　　22 竖条 <BR>　　23 <BR>//网页是否被检索 <BR><BR>&lt;meta name="ROBOTS" content="属性值"&gt; <BR>　　其中属性值有以下一些: <BR>　　属性值为"all": 文件将被检索，且页上链接可被查询； <BR>　　属性值为"none": 文件不被检索，而且不查询页上的链接； <BR>　　属性值为"index": 文件将被检索； <BR>　　属性值为"follow": 查询页上的链接； <BR>　　属性值为"noindex": 文件不检索，但可被查询链接； <BR>　　属性值为"nofollow": <BR><BR>//打印分页 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;p  style="page-break-after:always"&gt;page1&lt;/p&gt;   
&lt;p  style="page-break-after:always"&gt;page2&lt;/p&gt;   
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//设置打印<BR><SPAN><TEXTAREA rows=12 cols=95> 
&lt;object id="factory" style="display:none" viewastext 
  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" 
  codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360" 
&gt;&lt;/object&gt; 
&lt;input type=button value=页面设置 onclick="factory.printing.PageSetup()"&gt; 
&lt;input type=button value=打印预览 onclick="factory.printing.Preview()"&gt; 
  
&lt;script language=javascript&gt; 
function window.onload() 
{ 
   // -- advanced features 
   factory.printing.SetMarginMeasure(2) // measure margins in inches 
   factory.printing.SetPageRange(false, 1, 3) // need pages from 1 to 3 
   factory.printing.printer = "HP DeskJet 870C" 
   factory.printing.copies = 2 
   factory.printing.collate = true 
   factory.printing.paperSize = "A4" 
   factory.printing.paperSource = "Manual feed" 
   // -- basic features 
   factory.printing.header = "居左显示&amp;b居中显示&amp;b居右显示页码，第&amp;p页/共&amp;P页" 
   factory.printing.footer = "（自定义页脚）" 
   factory.printing.portrait = false 
   factory.printing.leftMargin = 0.75 
   factory.printing.topMargin = 1.5 
   factory.printing.rightMargin = 0.75 
   factory.printing.bottomMargin = 1.5 
} 
function Print(frame) { 
  factory.printing.Print(true, frame) // print with prompt 
} 
&lt;/script&gt; 
&lt;input type=button value="打印本页" onclick="factory.printing.Print(false)"&gt; 
&lt;input type=button value="页面设置" onclick="factory.printing.PageSetup()"&gt; 
&lt;input type=button value="打印预览" onclick="factory.printing.Preview()"&gt;&lt;br&gt; 
&lt;a href="http://www.meadroid.com/scriptx/docs/printdoc.htm?static"  target=_blank&gt;具体使用手册，更多信息，点这里&lt;/a&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR>//自带的打印预览 <BR><PRE class=CodeSamp>WebBrowser.ExecWB(1,1) 打开  
Web.ExecWB(2,1) 关闭现在所有的IE窗口，并打开一个新窗口  
Web.ExecWB(4,1) 保存网页  
Web.ExecWB(6,1) 打印  
Web.ExecWB(7,1) 打印预览  
Web.ExecWB(8,1) 打印页面设置  
Web.ExecWB(10,1) 查看页面属性  
Web.ExecWB(15,1) 好像是撤销，有待确认  
Web.ExecWB(17,1) 全选  
Web.ExecWB(22,1) 刷新  
Web.ExecWB(45,1) 关闭窗体无提示  
&lt;style media=print&gt;  
.Noprint{display:none;}&lt;!--用本样式在打印时隐藏非打印项目--&gt;  
.PageNext{page-break-after: always;}&lt;!--控制分页--&gt;  
&lt;/style&gt;  
&lt;object  id="WebBrowser"  width=0  height=0  classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"&gt;     
&lt;/object&gt;     
  
&lt;center class="Noprint" &gt; 
&lt;input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)&gt;  
&lt;input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)&gt;  
&lt;input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)&gt;  
&lt;/p&gt;  
&lt;p&gt; &lt;input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)&gt;  
&lt;/center&gt;
</PRE><BR>//去掉打印时的页眉页脚<BR><SPAN><TEXTAREA rows=12 cols=95> 
&lt;script  language="JavaScript"&gt;   
var HKEY_Root,HKEY_Path,HKEY_Key; 
HKEY_Root="HKEY_CURRENT_USER"; 
HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; 
//设置网页打印的页眉页脚为空 
function PageSetup_Null() 
{ 
 try 
 { 
         var Wsh=new ActiveXObject("WScript.Shell"); 
  HKEY_Key="header"; 
  Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); 
  HKEY_Key="footer"; 
  Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); 
 } 
 catch(e){} 
} 
//设置网页打印的页眉页脚为默认值 
function  PageSetup_Default() 
{   
 try 
 { 
  var Wsh=new ActiveXObject("WScript.Shell"); 
  HKEY_Key="header"; 
  Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&amp;w&amp;b页码,&amp;p/&amp;P"); 
  HKEY_Key="footer"; 
  Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&amp;u&amp;b&amp;d"); 
 } 
 catch(e){} 
} 
&lt;/script&gt; 
&lt;input type="button" value="清空页码" onclick=PageSetup_Null()&gt; 
&lt;input type="button" value="恢复页码" onclick=PageSetup_Default()&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//浏览器验证 <BR><BR><PRE class=CodeSamp>function checkBrowser() 
{  
   this.ver=navigator.appVersion  
   this.dom=document.getElementById?1:0  
   this.ie6=(this.ver.indexOf("MSIE 6")&gt;-1 &amp;&amp; this.dom)?1:0;  
   this.ie5=(this.ver.indexOf("MSIE 5")&gt;-1 &amp;&amp; this.dom)?1:0;  
   this.ie4=(document.all &amp;&amp; !this.dom)?1:0;  
   this.ns5=(this.dom &amp;&amp; parseInt(this.ver) &gt;= 5) ?1:0;  
   this.ns4=(document.layers &amp;&amp; !this.dom)?1:0;  
   this.mac=(this.ver.indexOf('Mac') &gt; -1) ?1:0;  
   this.ope=(navigator.userAgent.indexOf('Opera')&gt;-1);  
   this.ie=(this.ie6 || this.ie5 || this.ie4)  
   this.ns=(this.ns4 || this.ns5)  
   this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns5 || this.ns4 || this.mac || this.ope)  
   this.nbw=(!this.bw)  
   return this; 
} 
</PRE><BR>//计算内容宽和高 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;SCRIPT  language="javascript"&gt;   
function  test(obj)   
{   
       var  range  =  obj.createTextRange();   
       alert("内容区宽度:  "  +  range.boundingWidth     
                                                 +  "px\r\n内容区高度:  "  +  range.boundingHeight  +  "px");   
              
}   
&lt;/SCRIPT&gt;   
&lt;BODY&gt;   
&lt;Textarea id="txt" height="150"&gt;sdf&lt;/textarea&gt;&lt;INPUT  type="button"  value="计算内容宽度"  onClick="test(txt)"&gt;   
&lt;/BODY&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//无模式的提示框 <BR><PRE class=CodeSamp>function modelessAlert(Msg) 
{ 
   window.showModelessDialog("javascript:alert(\""+escape(Msg)+"\");window.close();","","status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;"); 
} 
</PRE><BR>//屏蔽按键 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;html&gt; 
&lt;head&gt; 
  &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; 
  &lt;noscript&gt;&lt;meta http-equiv="refresh" content="0;url=about:noscript"&gt;&lt;/noscript&gt; 
  &lt;title&gt;屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键&lt;/title&gt; 
&lt;/head&gt; 
&lt;body&gt; 
&lt;script language="Javascript"&gt;&lt;!-- 
  //屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 
  //Author: meizz(梅花雨) 2002-6-18 
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键 
function window.onhelp(){return false} //屏蔽F1帮助 
function document.onkeydown() 
{ 
  if ((window.event.altKey)&amp;&amp; 
      ((window.event.keyCode==37)||   //屏蔽 Alt+ 方向键 ← 
       (window.event.keyCode==39)))   //屏蔽 Alt+ 方向键 → 
  { 
     alert("不准你使用ALT+方向键前进或后退网页！"); 
     event.returnValue=false; 
  } 
     /* 注：这还不是真正地屏蔽 Alt+ 方向键， 
     因为 Alt+ 方向键弹出警告框时，按住 Alt 键不放， 
     用鼠标点掉警告框，这种屏蔽方法就失效了。以后若 
     有哪位高手有真正屏蔽 Alt 键的方法，请告知。*/ 
  if ((event.keyCode==8)  ||                 //屏蔽退格删除键 
      (event.keyCode==116)||                 //屏蔽 F5 刷新键 
      (event.ctrlKey &amp;&amp; event.keyCode==82)){ //Ctrl + R 
     event.keyCode=0; 
     event.returnValue=false; 
     } 
  if (event.keyCode==122){event.keyCode=0;event.returnValue=false;}  //屏蔽F11 
  if (event.ctrlKey &amp;&amp; event.keyCode==78) event.returnValue=false;   //屏蔽 Ctrl+n 
  if (event.shiftKey &amp;&amp; event.keyCode==121)event.returnValue=false;  //屏蔽 shift+F10 
  if (window.event.srcElement.tagName == "A" &amp;&amp; window.event.shiftKey)  
      window.event.returnValue = false;             //屏蔽 shift 加鼠标左键新开一网页 
  if ((window.event.altKey)&amp;&amp;(window.event.keyCode==115))             //屏蔽Alt+F4 
  { 
      window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); 
      return false; 
  } 
} 
&lt;/script&gt; 
屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键 
&lt;/body&gt; 
&lt;/html&gt;
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR><SPAN><TEXTAREA rows=12 cols=95>//屏蔽打印 
&lt;style&gt; 
@media print{ 
* {display:none} 
} 
&lt;/style&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//移动的图层，拖动 <BR><BR><BR>1.<BR><SPAN><TEXTAREA rows=12 cols=95>&lt;span style='position:absolute;width:200;height:200;background:red' onmousedown=MouseDown(this) onmousemove=MouseMove() onmouseup=MouseUp()&gt;meizz&lt;/span&gt; 
&lt;script language=javascript&gt; 
var Obj; 
function MouseDown(obj) 
{ 
  Obj=obj; 
  Obj.setCapture(); 
  Obj.l=event.x-Obj.style.pixelLeft; 
  Obj.t=event.y-Obj.style.pixelTop; 
} 
function MouseMove() 
{ 
  if(Obj!=null) 
  { 
    Obj.style.left = event.x-Obj.l; 
    Obj.style.top = event.y-Obj.t; 
  } 
} 
function MouseUp() 
{ 
  if(Obj!=null) 
  { 
    Obj.releaseCapture(); 
    Obj=null; 
  } 
} 
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;div id="myDiv" src="logo.gif" ondrag="doDrag();" onmouseover="this.style.cursor='hand'" style="position:absolute;left=100;top=100;" onmousedown="doMouseDown();"&gt; 
&lt;a href="#" onclick="return false"&gt;&lt;h1&gt;wlecome&lt;/h1&gt;&lt;/a&gt; 
&lt;/div&gt; 
&lt;script language="JavaScript" type="text/javascript"&gt; 
var orgMouseX; 
var orgMouseY; 
var orgObjX; 
var orgObjY; 
function doDrag() 
{ 
var myObject=document.all.myDiv; 

var x=event.clientX; 
var y=event.clientY; 
myObject.style.left=x-(orgMouseX-orgObjX); 
myObject.style.top=y-(orgMouseY-orgObjY); 
  
} 
function doMouseDown() 
{ 
orgMouseX=event.clientX; 
orgMouseY=event.clientY; 
orgObjX=parseInt(document.all.myDiv.style.left); 
orgObjY=parseInt(document.all.myDiv.style.top); 
} 

&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//文档状态改变 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;iframe src="a.html" id="f" name="f" scrolling="no" frameborder=0 marginwidth=0 marginheight=0&gt;&lt;/iframe&gt; 
&lt;script&gt; 
var doc=window.frames["f"].document; 
function s(){ 
 if (doc.readyState=="complete"){ 
  document.all.f.style.height=doc.body.scrollHeight 
  document.all.f.style.width=doc.body.scrollWidth 
 } 
} 
doc.onreadystatechange=s 
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//刷新后不变的文本框 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;HTML&gt; 
&lt;HEAD&gt; 
&lt;META NAME="save" CONTENT="history"&gt; 
&lt;STYLE&gt; 
   .sHistory {behavior:url(#default#savehistory);} 
&lt;/STYLE&gt; 
&lt;/HEAD&gt; 
&lt;BODY&gt; 
&lt;INPUT class=sHistory type=text id=oPersistInput&gt; 
&lt;/BODY&gt; 
&lt;/HTML&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//访问剪贴板 <BR><BR>(1)拖拽访问 <BR><PRE class=CodeSamp>event.dataTransfer.setData("URL", oImage.src); 
sImageURL = event.dataTransfer.getData("URL");
</PRE><BR>(2)普通访问<BR><PRE class=CodeSamp> 
window.clipboardData.setData("Text",oSource.innerText); 
window.clipboardData.getData("Text"); 
</PRE><BR><BR>//操作COOKIE <BR><BR><PRE class=CodeSamp>function SetCookie(sName, sValue) 
{ 
 document.cookie = sName + "=" + escape(sValue) + "; "; 
} 
function GetCookie(sName) 
{ 
 var aCookie = document.cookie.split("; "); 
 for (var i=0; i &lt; aCookie.length; i++) 
 { 
   
  var aCrumb = aCookie[i].split("="); 
  if (sName == aCrumb[0])  
  return unescape(aCrumb[1]); 
 } 
  
} 
function DelCookie(sName) 
{ 
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;"; 
} 
</PRE><BR>//setTimeout增加参数 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script&gt; 
var _st = window.setTimeout; 
window.setTimeout = function(fRef, mDelay) { 
 if(typeof fRef == 'function'){ 
  var argu = Array.prototype.slice.call(arguments,2); 
  var f = (function(){ fRef.apply(null, argu); }); 
  return _st(f, mDelay); 
 } 
 return _st(fRef,mDelay); 
} 
function test(x){ 
 alert(x); 
} 
window.setTimeout(test,1000,'fason'); 
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//自定义的apply,call <BR><PRE class=CodeSamp>Function.prototype.apply = function (obj, argu) { 
 if (obj) obj.constructor.prototype._caller = this;  
 var argus = new Array(); 
 for (var i=0;i&lt;argu.length;i++) 
  argus[i] = "argu[" + i + "]"; 
 var r; 
 eval("r = " + (obj ? ("obj._caller(" + argus.join(",") + ");") : ("this(" + argus.join(",") + ");"))); 
 return r; 
}; 
Function.prototype.call = function (obj) { 
 var argu = new Array(); 
 for (var i=1;i&lt;arguments.length;i++) 
  argu[i-1] = arguments[i]; 
 return this.apply(obj, argu); 
};        
</PRE><BR>//下载文件 <BR><PRE class=CodeSamp>function DownURL(strRemoteURL,strLocalURL) 
{ 
 try 
 { 
  var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP"); 
  xmlHTTP.open("Get",strRemoteURL,false); 
  xmlHTTP.send(); 
  var adodbStream=new ActiveXObject("ADODB.Stream"); 
  adodbStream.Type=1;//1=adTypeBinary 
  adodbStream.Open(); 
  adodbStream.write(xmlHTTP.responseBody); 
  adodbStream.SaveToFile(strLocalURL,2); 
  adodbStream.Close(); 
  adodbStream=null; 
  xmlHTTP=null; 
   
 } 
 catch(e) 
 { 
  window.confirm("下载URL出错!"); 
 } 
 //window.confirm("下载完成."); 
} 
</PRE><BR>//检验连接是否有效 <BR><PRE class=CodeSamp>function getXML(URL)  
{ 
 var xmlhttp = new ActiveXObject("microsoft.xmlhttp"); 
 xmlhttp.Open("GET",URL, false);  
 try 
 {  
  xmlhttp.Send(); 
 } 
 catch(e){} 
 finally  
 { 
  var result = xmlhttp.responseText; 
  if(result)  
  { 
   if(xmlhttp.Status==200) 
   { 
    return(true); 
   } 
   else  
   { 
    return(false); 
   } 
  } 
  else  
  { 
   return(false); 
  } 
 } 
} 
</PRE><BR>//POST代替FORM <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;SCRIPT language="VBScript"&gt; 
Function URLEncoding(vstrIn) 
    strReturn = "" 
    For i = 1 To Len(vstrIn) 
        ThisChr = Mid(vStrIn,i,1) 
        If Abs(Asc(ThisChr)) &lt; &amp;HFF Then 
            strReturn = strReturn &amp; ThisChr 
        Else 
            innerCode = Asc(ThisChr) 
            If innerCode &lt; 0 Then 
                innerCode = innerCode + &amp;H10000 
            End If 
            Hight8 = (innerCode  And &amp;HFF00)\ &amp;HFF 
            Low8 = innerCode And &amp;HFF 
            strReturn = strReturn &amp; "%" &amp; Hex(Hight8) &amp;  "%" &amp; Hex(Low8) 
        End If 
    Next 
    URLEncoding = strReturn 
End Function 
Function bytes2BSTR(vIn) 
    strReturn = "" 
    For i = 1 To LenB(vIn) 
        ThisCharCode = AscB(MidB(vIn,i,1)) 
        If ThisCharCode &lt; &amp;H80 Then 
            strReturn = strReturn &amp; Chr(ThisCharCode) 
        Else 
            NextCharCode = AscB(MidB(vIn,i+1,1)) 
            strReturn = strReturn &amp; Chr(CLng(ThisCharCode) * &amp;H100 + CInt(NextCharCode)) 
            i = i + 1 
        End If 
    Next 
    bytes2BSTR = strReturn 
End Function 
dim strA,oReq 
strA = URLEncoding("submit1=Submit&amp;text1=中文") 
set oReq = CreateObject("MSXML2.XMLHTTP") 
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false 
oReq.setRequestHeader "Content-Length",Len(strA) 
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded" 
oReq.send strA 
msgbox bytes2BSTR(oReq.responseBody) 
&lt;/SCRIPT&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//readyState是xmlhttp返回数据的进度，0=载入中,1=未初始化,2=已载入,3=运行中,4=完成<BR>//组件是否安装 <BR><PRE class=CodeSamp>isComponentInstalled("{6B053A4B-A7EC-4D3D-4567-B8FF8A1A5739}", "componentID")) 
</PRE><BR>//检查网页是否存在 <BR><BR><PRE class=CodeSamp>function CheckURL(URL) 
{ 
  var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
  xmlhttp.Open("GET",URL, false); 
  try 
  {  
    xmlhttp.Send();  
    var result = xmlhttp.status; 
  } 
  catch(e) {return(false); } 
  if(result==200) 
  {  
    return true; 
  } 
  xmlhttp = null; 
  return false; 
} 
</PRE><BR>//连接数据库 <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language="javascript"&gt; 
  //用 JavaScript 写服务器端连接数据库的代码示例 
  var conn = new ActiveXObject("ADODB.Connection"); 
  conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID=sa; " 
    +"Password=; Initial Catalog=pubs"); 
  var rs = new ActiveXObject("ADODB.Recordset"); 
  var sql="select * from authors"; 
  rs.open(sql, conn); 
 shtml = "&lt;table width='100%' border=1&gt;"; 
 shtml +="&lt;tr bgcolor='#f4f4f4'&gt;&lt;td&gt;au_id&lt;/td&gt;&lt;td&gt;au_lname&lt;/td&gt;&lt;td&gt;au_fname&lt;/td&gt;&lt;td&gt;phone&lt;/td&gt;&lt;td&gt;address&lt;/td&gt;&lt;td&gt; city&lt;/td&gt;&lt;td&gt;state&lt;/td&gt;&lt;td&gt;zip&lt;/td&gt;&lt;/tr&gt;"; 
  while(!rs.EOF) 
  { 
 shtml += "&lt;tr&gt;&lt;td&gt;" + rs("au_id") + "&lt;/td&gt;&lt;td&gt;" + rs("au_lname") + "&lt;/td&gt;&lt;td&gt;" + rs("au_fname") + "&lt;/td&gt;&lt;td&gt;" + rs("phone") + "&lt;/td&gt;&lt;td&gt;" + rs("address") + "&lt;/td&gt;&lt;td&gt;" + rs("city") + "&lt;/td&gt;&lt;td&gt;" + rs("state") + "&lt;/td&gt;&lt;td&gt;" + rs("zip") + "&lt;/td&gt;&lt;/tr&gt;"; 
 rs.moveNext; 
  } 
  shtml += "&lt;/table&gt;"; 
  document.write(shtml); 
  rs.close();  
  rs = null;  
  conn.close();  
  conn = null; 
&lt;/script&gt;
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR>//使用数据岛 <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;html&gt; 
&lt;body&gt; 
srno：&lt;input type=text datasrc=#xmldate DataFLD=srno size="76"&gt;&lt;BR&gt; 
times：&lt;input type=text datasrc=#xmldate DataFLD=times size="76"&gt;&lt;BR&gt; 
&lt;input id="first" TYPE=button value="&lt;&lt;　第一条记录" onclick="xmldate.recordset.moveFirst()"&gt; 
&lt;input id="prev" TYPE=button value="&lt;上一条记录" onclick="xmldate.recordset.movePrevious()"&gt;   
&lt;input id="next" TYPE=button value="下一条记录&gt;" onclick="xmldate.recordset.moveNext()"&gt;   
&lt;input id="last" TYPE=button value="最后一条记录&gt;&gt;" onclick="xmldate.recordset.moveLast()"&gt;    
&lt;input id="Add" TYPE=button value="添加新记录" onclick="xmldate.recordset.addNew()"&gt;   

&lt;XML ID="xmldate"&gt; 
&lt;infolist&gt; 
&lt;info &gt;&lt;srno&gt;20041025-01&lt;/srno&gt;&lt;times&gt;null&lt;/times&gt;&lt;/info&gt; 
&lt;info &gt;&lt;srno&gt;20041101-09&lt;/srno&gt;&lt;times&gt;2004年10月1日2点22分0秒&lt;/times&gt;&lt;/info&gt; 
&lt;/infolist&gt; 
&lt;/XML&gt; 
&lt;/body&gt; 
&lt;/html&gt;
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR>//获得参数 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;body&gt; 
&lt;a href="javascript:location.href=location.href + '?a=1&amp;b=2'"&gt;search&lt;/a&gt; 
&lt;script language="JavaScript"&gt; 
&lt;!-- 
var a = location.search.substr(1); 
if(a.length&gt;0) 
{ 
 var re = /([^&amp;]*?)\=([^&amp;]*)/g 
 var s = a.match(re); 
 for(var i= 0;i&lt;s.length;i++) 
 { 
  alert(s[i]); 
  alert(s[i].split("=")[1]); 
 } 
} 
//--&gt; 
&lt;/script&gt; 
&lt;/body&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//可编辑SELECT <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;input type=text name=re_name style="width:100px;height:21px;font-size:10pt;"&gt;&lt;span style="width:18px;border:0px solid red;"&gt;&lt;select name="r00" style="margin-left:-100px;width:118px; background-color:#FFEEEE;" onChange="document.all.re_name.value=this.value;"&gt; 
                &lt;option value="1"&gt;11111111&lt;option&gt; 
                &lt;option value="2"&gt;222222&lt;/option&gt; 
                &lt;option value="3"&gt;333333&lt;/option&gt; 
              &lt;/select&gt; 
              &lt;/span&gt; 

</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR><BR>//设置光标位置 <BR><BR><PRE class=CodeSamp>function getCaret(textbox) 
{ 
 var control = document.activeElement; 
 textbox.focus(); 
 var rang = document.selection.createRange(); 
  rang.setEndPoint("StartToStart",textbox.createTextRange()) 
 control.focus(); 
 return rang.text.length; 
} 
function setCaret(textbox,pos) 
{ 
 try 
 { 
  var r =textbox.createTextRange(); 
   r.moveStart('character',pos); 
   r.collapse(true); 
   r.select(); 
 } 
 catch(e) 
 {} 
} 
function selectLength(textbox,start,len) 
{ 
 try 
 { 
  var r =textbox.createTextRange(); 
  
  r.moveEnd('character',len-(textbox.value.length-start)); 
  r.moveStart('character',start); 
   
  r.select(); 
 } 
 catch(e) 
 {//alert(e.description)} 
} 
function insertAtCaret(textbox,text) 
{ 
 textbox.focus(); 
 document.selection.createRange().text = text; 
} 
</PRE><BR>//页内查找 <BR><BR><PRE class=CodeSamp>function findInPage(str) 
{ 
 var txt, i, found,n = 0; 
 if (str == "") 
 { 
  return false; 
 } 
 txt = document.body.createTextRange(); 
 for (i = 0; i &lt;= n &amp;&amp; (found = txt.findText(str)) != false; i++) 
 { 
  txt.moveStart("character", 1); 
  txt.moveEnd("textedit"); 
 } 
 if (found) 
 { 
  txt.moveStart("character", -1); 
  txt.findText(str); 
  txt.select(); 
  txt.scrollIntoView(); 
  n++;   
 } 
 else 
 { 
  if (n &gt; 0) 
  { 
   n = 0; 
   findInPage(str); 
  } 
  else 
  { 
   alert(str + "...            您要找的文字不存在。\n \n请试着输入页面中的关键字再次查找！"); 
  } 
 } 
 return false; 
} 
</PRE><BR>//书 <BR><BR><A href="http://www.itpub.net/attachment.php?s=&amp;postid=1894598" target=_blank>http://www.itpub.net/attachment.php?s=&amp;postid=1894598</A> <BR><A href="http://www.wrclub.net/down/listdown.aspx?id=1341" target=_blank>http://www.wrclub.net/down/listdown.aspx?id=1341</A><BR>//操作EXECL <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language="javascript"&gt; 
function jStartExcel() { 
 var xls = new ActiveXObject ( "Excel.Application" ); 
 xls.visible = true; 
 var newBook = xls.Workbooks.Add; 
 newBook.Worksheets.Add; 
 newBook.Worksheets(1).Activate; 
 xls.ActiveWorkBook.ActiveSheet.PageSetup.Orientation = 2; 
 xls.ActiveWorkBook.ActiveSheet.PageSetup.PaperSize = 5; 
 newBook.Worksheets(1).Columns("A").columnwidth=50; 
 newBook.Worksheets(1).Columns("A").WrapText = true; 
 newBook.Worksheets(1).Columns("B").columnwidth=50; 
 newBook.Worksheets(1).Columns("B").WrapText = true; 
 newBook.Worksheets(1).Range("A1:B1000").NumberFormat = "0"; 
 newBook.Worksheets(1).Range("A1:B1000").HorizontalAlignment = -4131; 
 newBook.Worksheets(1).Cells(1,1).Interior.ColorIndex="15"; 
 newBook.Worksheets(1).Cells(1,1).value="First Column, First Cell"; 
 newBook.Worksheets(1).Cells(2,1).value="First Column, Second Cell"; 
 newBook.Worksheets(1).Cells(1,2).value="Second Column, First Cell"; 
 newBook.Worksheets(1).Cells(2,2).value="Second Column, Second Cell"; 
 newBook.Worksheets(1).Name="My First WorkSheet"; 
} 
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//自定义提示条 <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;a href="#" title="这是提示"&gt;tip&lt;/a&gt; 
&lt;script Language="JavaScript"&gt; 
//***********默认设置定义.********************* 
tPopWait=50;//停留tWait豪秒后显示提示。 
tPopShow=5000;//显示tShow豪秒后关闭提示 
showPopStep=20; 
popOpacity=99; 
//***************内部变量定义***************** 
sPop=null; 
curShow=null; 
tFadeOut=null; 
tFadeIn=null; 
tFadeWaiting=null; 
document.write("&lt;style type='text/css'id='defaultPopStyle'&gt;"); 
document.write(".cPopText {  background-color: #F8F8F5;color:#000000; border: 1px #000000 solid;font-color: font-size: 12px; padding-right: 4px; padding-left: 4px; height: 20px; padding-top: 2px; padding-bottom: 2px; filter: Alpha(Opacity=0)}"); 
document.write("&lt;/style&gt;"); 
document.write("&lt;div id='dypopLayer' style='position:absolute;z-index:1000;' class='cPopText'&gt;&lt;/div&gt;"); 

function showPopupText(){ 
var o=event.srcElement; 
MouseX=event.x; 
MouseY=event.y; 
if(o.alt!=null &amp;&amp; o.alt!=""){o.dypop=o.alt;o.alt=""}; 
        if(o.title!=null &amp;&amp; o.title!=""){o.dypop=o.title;o.title=""}; 
if(o.dypop!=sPop) { 
sPop=o.dypop; 
clearTimeout(curShow); 
clearTimeout(tFadeOut); 
clearTimeout(tFadeIn); 
clearTimeout(tFadeWaiting); 
if(sPop==null || sPop=="") { 
dypopLayer.innerHTML=""; 
dypopLayer.style.filter="Alpha()"; 
dypopLayer.filters.Alpha.opacity=0; 
} 
else { 
if(o.dyclass!=null) popStyle=o.dyclass  
else popStyle="cPopText"; 
curShow=setTimeout("showIt()",tPopWait); 
} 
} 
} 
function showIt(){ 
dypopLayer.className=popStyle; 
dypopLayer.innerHTML=sPop; 
popWidth=dypopLayer.clientWidth; 
popHeight=dypopLayer.clientHeight; 
if(MouseX+12+popWidth&gt;document.body.clientWidth) popLeftAdjust=-popWidth-24 
else popLeftAdjust=0; 
if(MouseY+12+popHeight&gt;document.body.clientHeight) popTopAdjust=-popHeight-24 
else popTopAdjust=0; 
dypopLayer.style.left=MouseX+12+document.body.scrollLeft+popLeftAdjust; 
dypopLayer.style.top=MouseY+12+document.body.scrollTop+popTopAdjust; 
dypopLayer.style.filter="Alpha(Opacity=0)"; 
fadeOut(); 
} 
function fadeOut(){ 
if(dypopLayer.filters.Alpha.opacity&lt;popOpacity) { 
dypopLayer.filters.Alpha.opacity+=showPopStep; 
tFadeOut=setTimeout("fadeOut()",1); 
} 
else { 
dypopLayer.filters.Alpha.opacity=popOpacity; 
tFadeWaiting=setTimeout("fadeIn()",tPopShow); 
} 
} 
function fadeIn(){ 
if(dypopLayer.filters.Alpha.opacity&gt;0) { 
dypopLayer.filters.Alpha.opacity-=1; 
tFadeIn=setTimeout("fadeIn()",1); 
} 
} 
document.onmouseover=showPopupText; 
&lt;/script&gt;
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN> <BR>//插入文字 <BR><PRE class=CodeSamp>document.onclick =function(){  
var oSource = window.event.srcElement;  
if(oSource.tagName!="DIV")  
return false;  
var sel = document.selection;  
if (sel!=null) {  
var rng = sel.createRange();  
if (rng!=null)  
rng.pasteHTML("&lt;font color=red&gt;插入文字&lt;/font&gt;");  
}  
}  
//netscapte下操作xml 

doc = new ActiveXObject("Msxml2.DOMDocument"); 
doc = new ActiveXObject("Microsoft.XMLDOM") 
-&gt;&gt; 
doc = (new DOMParser()).parseFromString(sXML,'text/xml') 
</PRE><BR>//判断键值 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;html&gt; 
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; 
&lt;head&gt; 
&lt;script language="javascript"&gt; 
var ie  =navigator.appName=="Microsoft Internet Explorer"?true:false; 
   
function keyDown(e) 
{ 
 if(!ie) 
 { 
  var nkey=e.which; 
  var iekey='现在是ns浏览器'; 
  var realkey=String.fromCharCode(e.which); 
 } 
 if(ie) 
 { 
  var iekey=event.keyCode; 
  var nkey='现在是ie浏览器'; 
  var realkey=String.fromCharCode(event.keyCode); 
  if(event.keyCode==32){realkey='\' 空格\''} 
  if(event.keyCode==13){realkey='\' 回车\''} 
  if(event.keyCode==27){realkey='\' Esc\''} 
  if(event.keyCode==16){realkey='\' Shift\''} 
  if(event.keyCode==17){realkey='\' Ctrl\''} 
  if(event.keyCode==18){realkey='\' Alt\''} 
 } 
 alert('ns浏览器中键值:'+nkey+'\n'+'ie浏览器中键值:'+iekey+'\n'+'实际键为'+realkey); 
} 
document.onkeydown = keyDown; 
&lt;/script&gt; 
&lt;/head&gt; 
&lt;body&gt; 
//Javascript Document. 
&lt;hr&gt; 
&lt;center&gt; 
&lt;h3&gt;请按任意一个键。。。。&lt;/h3&gt; 
&lt;/center&gt; 
&lt;/body&gt; 
&lt;/html&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//禁止FSO <BR><BR><BR>1.注销组件 <BR>regsvr32 /u scrrun.dll <BR>2.修改PROGID <BR>HKEY_CLASSES_ROOT\Scripting.FileSystemObject <BR>Scripting.FileSystemObject <BR>3.对于使用object的用户，修改HKEY_CLASSES_ROOT\Scripting. <BR><BR>//省略号 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;DIV STYLE="width: 120px; height: 50px; border: 1px solid blue; 
            overflow: hidden; text-overflow:ellipsis"&gt; 
&lt;NOBR&gt;就是比如有一行文字，很长，表格内一行显示不下.&lt;/NOBR&gt; 
&lt;/DIV&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//检测media play版本 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;IE:clientCaps ID="oClientCaps" style="{behavior:url(#default#clientcaps)}" /&gt; 
&lt;SCRIPT&gt; 
var flash=""; 
    WMPVersion= oClientCaps.getComponentVersion("{22D6F312-B0F6-11D0-94AB-0080C74C7E95}","ComponentID");  
    if (WMPVersion != "") { 
    flash = ""; 
    var version = WMPVersion.split(","); 
    var i; 
    for (i = 0; i &lt; version.length; i++) { 
      if (i != 0) 
    flash += "."; 
      flash += version[i]; 
    } 
     document.write("您的Windows Media Player 版本是:"+flash+"&lt;p&gt;"); 
  } 
&lt;/SCRIPT&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR><BR><BR><BR>//图象按比例 <BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language="JavaScript"&gt; 
&lt;!-- 
//图片按比例缩放 
var flag=false; 
function DrawImage(ImgD){ 
 var image=new Image(); 
 var iwidth = 80;  //定义允许图片宽度 
 var iheight = 80;  //定义允许图片高度 
 image.src=ImgD.src; 
 if(image.width&gt;0 &amp;&amp; image.height&gt;0){ 
 flag=true; 
 if(image.width/image.height&gt;= iwidth/iheight){ 
  if(image.width&gt;iwidth){   
  ImgD.width=iwidth; 
  ImgD.height=(image.height*iwidth)/image.width; 
  }else{ 
  ImgD.width=image.width;   
  ImgD.height=image.height; 
  } 
  ImgD.alt=image.width+"×"+image.height; 
  } 
 else{ 
  if(image.height&gt;iheight){   
  ImgD.height=iheight; 
  ImgD.width=(image.width*iheight)/image.height;   
  }else{ 
  ImgD.width=image.width;   
  ImgD.height=image.height; 
  } 
  ImgD.alt=image.width+"×"+image.height; 
  } 
 } 
}  
//--&gt; 
&lt;/script&gt; 
&lt;img src=".." onload = "DrawImage(this)"&gt; 

</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR><BR><BR>//细线SELECT <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;span style="border:1px solid #000000; position:absolute; overflow:hidden;" &gt; 
&lt;select style="margin:-2px;"&gt; 
&lt;option&gt;1111&lt;/option&gt; 
&lt;option&gt;11111111111111&lt;/option&gt; 
&lt;option&gt;111111111&lt;/option&gt; 
&lt;/select&gt;&lt;/span&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR>//Import <BR><PRE class=CodeSamp>function Import() { 
 for( var i=0; i&lt;arguments.length; i++ ) { 
  var file = arguments[i]; 
  if ( file.match(/\.js$/i))  
   document.write('&lt;script type=\"text/javascript\" src=\"' + file + '\"&gt;&lt;/sc' + 'ript&gt;'); 
  else 
   document.write('&lt;style type=\"text/css\"&gt;@import \"' + file + '\" ;&lt;/style&gt;'); 
 } 
}; 
</PRE><BR>//js枚举 <BR><PRE class=CodeSamp>function getComputerName() 
{ 
 var objWMIService = GetObject("Winmgmts:root\cimv2"); 
 for(e = new Enumerator(objWMIService) ; !e.atEnd() ; e.moveNext()) 
 { 
    var getComputer = e.item(); 
    return getComputer.Name; 
 } 
} 

</PRE><BR>//条件编译 <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;script language=javascript&gt; 
/*@cc_on @*/ 
/*@if (@_win32 &amp;&amp; @_jscript_version&gt;5) 
function window.confirm(str) 
{ 
    execScript("n = msgbox('"+ str +"', 257)", "vbscript"); 
    return(n == 1); 
} 
@end @*/ 
&lt;/script&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN><BR><BR>//取得innerText <BR><BR><SPAN><TEXTAREA rows=12 cols=95>&lt;SCRIPT LANGUAGE="JavaScript"&gt; 
&lt;!-- 
 var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0"); 
 var currNode; 
 xmlDoc.async = false; 
 xmlDoc.async = false; 
 xmlDoc.loadXML("&lt;TABLENAME&gt;      你好你阿三    大法     司法等四              &lt;/TABLENAME&gt;"); 
 currNode = xmlDoc.documentElement; 
    
  var s = currNode.xml; 
  var r = /\&lt;([^\&gt;\s]*?)[^\&gt;]*?\&gt;([^\&lt;]*?)\&lt;\/\1\&gt;/ 
  var b = s.replace(r,"$2"); 
  alert(b); 
//--&gt; 
&lt;/SCRIPT&gt; 
//mergeAttributes 复制所有读/写标签属性到指定元素。 

&lt;SCRIPT&gt; 
function fnMerge(){ 
oSource.children[1].mergeAttributes(oSource.children[0]); 
} 
&lt;/SCRIPT&gt; 
&lt;SPAN ID=oSource&gt; 
&lt;DIV 
ID="oDiv" 
ATTRIBUTE1="true" 
ATTRIBUTE2="true" 
onclick="alert('click');" 
onmouseover="this.style.color='#0000FF';" 
onmouseout="this.style.color='#000000';" 
&gt; 
This is a sample &lt;B&gt;DIV&lt;/B&gt; element. 
&lt;/DIV&gt; 
&lt;DIV ID="oDiv2"&gt; 
This is another sample &lt;B&gt;DIV&lt;/B&gt; element. 
&lt;/DIV&gt; 
&lt;/SPAN&gt; 
&lt;INPUT 
TYPE="button" 
VALUE="Merge Attributes" 
onclick="fnMerge()" 
&gt; 
</TEXTAREA><BR><INPUT onclick=runCode() type=button value=运行代码> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</SPAN>&nbsp; <img src ="http://www.cnitblog.com/ffan/aggbug/2663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-09-14 15:48 <a href="http://www.cnitblog.com/ffan/archive/2005/09/14/2663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日语在线翻译网站大全</title><link>http://www.cnitblog.com/ffan/archive/2005/08/13/1874.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Sat, 13 Aug 2005 14:18:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/08/13/1874.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/1874.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/08/13/1874.html#Feedback</comments><slash:comments>99</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/1874.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/1874.html</trackback:ping><description><![CDATA[<P><STRONG>英语翻译网站:</STRONG><BR><A href="http://www.readworld.com/" target=_blank><FONT color=#000000>http://www.readworld.com</FONT></A><BR><BR>中日英互译,还能上载翻译 <BR><A href="http://165net.com/" target=_blank><FONT color=#000000>http://165net.com</FONT></A><BR><BR><A href="http://www.worldlingo.com/" target=_blank><FONT color=#000000>http://www.worldlingo.com/</FONT></A><BR><BR><A href="http://www.netat.net/" target=_blank><FONT color=#000000>http://www.netat.net/</FONT></A><BR><BR><A href="http://www.translate.ru/eng/" target=_blank><FONT color=#000000>http://www.translate.ru/eng/</FONT></A><BR><BR><STRONG>日语翻译网站</STRONG><BR>1.goo 辞書:收录4部三省堂字典<BR><A href="http://dictionary.goo.ne.jp/index.htmlc">http://dictionary.goo.ne.jp/index.htmlc</A></P>
<P>2.インフォシーク :支持在线翻译文本和网页<BR><A href="http://www.infoseek.co.jp/Honyaku/">http://www.infoseek.co.jp/Honyaku/</A></P>
<P><A href="mailto:3.@nifty">3.@nifty</A>翻訳:英和辞典／和英辞典 国語辞典 デジタル用語辞典<BR><A href="http://www.nifty.com/dictionary/?top4">http://www.nifty.com/dictionary/?top4</A></P>
<P>4.万物大辞典:所有日常用专业辞典<BR><A href="http://www.prcity.co.jp/oichan/dic/index.html">http://www.prcity.co.jp/oichan/dic/index.html</A></P>
<P>5.在线字典集合网页<BR><A href="http://www.kyotsu.com/level2/culture/dictionary.htm">http://www.kyotsu.com/level2/culture/dictionary.htm</A></P>
<P>6.Bit.ex日中 中日辞書<BR><A href="http://www.bitex-cn.com">http://www.bitex-cn.com</A></P>
<P>7.Kiki's Kanji Dictionary:日汉字发音大全<BR><A href="http://www.kanjidict.com/">http://www.kanjidict.com/</A></P>
<P>8.楽 語 辞 書:乐器方面的辞典<BR><A href="http://www.cablenet.ne.jp/~atari/music09.htm">http://www.cablenet.ne.jp/~atari/music09.htm</A></P>
<P>9.ライフサイエンス辞書:提供一些日文输入法的下载及电子辞典部分内容下载<BR><A href="http://lsd.pharm.kyoto-u.ac.jp/FTP3-dos-J.html">http://lsd.pharm.kyoto-u.ac.jp/FTP3-dos-J.html</A><BR><A href="http://lsd.pharm.kyoto-u.ac.jp/Others-J.html">http://lsd.pharm.kyoto-u.ac.jp/Others-J.html</A></P>
<P>10.日语学习资源发布:日语相关的资料贴子(暴多网站)<BR><A href="http://bbs.online.sh.cn/elitearticle.php?elite_id=231124">http://bbs.online.sh.cn/elitearticle.php?elite_id=231124</A></P>
<P>11.excite翻訳:支持在线翻译文本<BR><A href="http://www.excite.co.jp/world/text_cn/">http://www.excite.co.jp/world/text_cn/</A></P>
<P>12.三省堂在线字典<BR><A href="http://www.sanseido.net/">http://www.sanseido.net/</A></P>
<P>13.カタカナ語:外来语辞典<BR><A href="http://homepage2.nifty.com/YONE/">http://homepage2.nifty.com/YONE/</A></P>
<P>14.パソコン辞典:电脑专业用语辞典<BR><A href="http://www.qiuyue.com/index.html">http://www.qiuyue.com/index.html</A></P>
<P>15.デジタル用語辞典:基礎的なパソコン用語から難しい専門用語まで、コンピュータに関連する用語を幅広く収録したインターネット上の用語辞典です<BR><A href="http://yougo.ascii24.com/">http://yougo.ascii24.com/</A></P>
<P>16.女の子の名前辞書<BR><A href="http://www.dd.iij4u.or.jp/~ume20/f_name/">http://www.dd.iij4u.or.jp/~ume20/f_name/</A></P>
<P>17.アニメと人形劇のキャラクターのスペル辞典<BR><A href="http://web.kyoto-inet.or.jp/peop">http://web.kyoto-inet.or.jp/peop</A> ... sons/animechara.htm</P>
<P>18.日语文章汉字假名自动全篇标注<BR><A href="http://www.yaru.com/">http://www.yaru.com/</A></P>
<P>19.房英類似辞典 外来语研究辞典<BR><A href="http://www.awa.or.jp/home/hiroomi/b-jdic/b-jindex.htm">http://www.awa.or.jp/home/hiroomi/b-jdic/b-jindex.htm</A><BR><BR><STRONG><BR><BR>几个不错的互译网站<BR><BR></STRONG><A href="http://www3.j-server.com/KODENSHA/contents/trial/index.htm" target=_blank><FONT color=#000000>http://www3.j-server.com/KODENSHA/contents/trial/index.htm</FONT></A><BR><BR><A href="http://www.worldlingo.com/en/pro ... ngo_translator.html" target=_blank><FONT color=#000000>http://www.worldlingo.com/en/pro ... ngo_translator.html</FONT></A><BR><BR><A href="http://www.worldlingo.com/zh/pro ... er_translation.html" target=_blank><FONT color=#000000>http://www.worldlingo.com/zh/pro ... er_translation.html</FONT></A><BR><BR><A href="http://babelfish.altavista.com/" target=_blank><FONT color=#000000>http://babelfish.altavista.com/</FONT></A><BR></P><img src ="http://www.cnitblog.com/ffan/aggbug/1874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-08-13 22:18 <a href="http://www.cnitblog.com/ffan/archive/2005/08/13/1874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VBSCRIPT常用函数【转】</title><link>http://www.cnitblog.com/ffan/archive/2005/08/12/1487.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Thu, 11 Aug 2005 16:16:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/08/12/1487.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/1487.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/08/12/1487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/1487.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/1487.html</trackback:ping><description><![CDATA[<STRONG>1.函数array()</STRONG>　<BR>&nbsp;功能:创建一个数组变量　<BR>&nbsp;格式:array(list)　<BR>&nbsp;参数:list　为数组变量中的每个数值列,中间用逗号间隔　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　i　=　array　(“1”,”2”,”3”)　%&gt;　<BR>&nbsp;结果:　i　被赋予为数组　<BR><BR><STRONG>&nbsp;2.函数Cint()</STRONG>　<BR>&nbsp;功能:将一表达式/其它类型的变量转换成整数类型(int)　<BR>&nbsp;格式:Cint(expression)　<BR>&nbsp;参数:expression　是任何有效的表达式/其它类型的变量　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;f　=　”234”　<BR>&nbsp;response.write　cINT(f)　+　2　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　236　<BR>&nbsp;函数Cint()将字符”234”转换　成整数234.如果表达式为空,　或者无效时,返回值为0;　<BR><BR><STRONG>CInt()、CLng()、CSng()、CDbl()</STRONG><BR>功能：用来把一个变量转换成整型、长整型、单精度型和双精度型。<BR><STRONG><BR>&nbsp;3.函数:Creatobject()　</STRONG><BR>&nbsp;功能:创建及返回一个ActiveX对象.　<BR>&nbsp;格式:Creatobject(obname)　<BR>&nbsp;参数bname　是对象的名称　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;Set　con　=　Server.CreateObject(“ADODB.Connection”)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　<BR><BR><STRONG>&nbsp;4.函数Cstr()　</STRONG><BR>&nbsp;功能:将一表达式/其它类型的变量转换成字符类型(string)　<BR>&nbsp;格式:Cstr(expression)　<BR>&nbsp;参数:expression是任何有效的表达式/其它类型的变量　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;s　=　3　+　2　<BR>&nbsp;response.write　”The　result　is:　”　&amp;　cStr(s)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:函数Cstr()将整数　5　转换　成字符”5”.　<BR><BR><STRONG>&nbsp;5.函数Date()</STRONG>　<BR>&nbsp;功能:返回当前系统(server端)的日期　<BR>&nbsp;格式:　Date()　<BR>&nbsp;参数:无　<BR>&nbsp;例子&lt;%　date　()　%&gt;　<BR>&nbsp;结果:05/10/00<BR>　<BR><STRONG>&nbsp;6.函数Dateadd()</STRONG>　<BR>&nbsp;功能:计算某个指定的时间和　<BR>&nbsp;格式:　dateadd(timeinterval,number,date)　<BR>&nbsp;参数:timeinterval是时间单位(月,日..);　number是时间间隔值,date是时间始点.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;currentDate　=　#8/4/99#　<BR>&nbsp;newDate　=　DateAdd(“m”,3,currentDate)　<BR>&nbsp;response.write　newDate　<BR>&nbsp;%&gt;　&lt;%　<BR>&nbsp;currentDate　=　#12:34:45　PM#　<BR>&nbsp;newDate　=　DateAdd(“h”,3,currentDate)　<BR>&nbsp;response.write　newDate　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　<BR>&nbsp;11/4/99　<BR>&nbsp;3:34:45　PM　<BR>&nbsp;其中　<BR>&nbsp;“m”　=　”month”;　<BR>&nbsp;“d”　=　”day”;　<BR>&nbsp;如果是currentDate　格式,则,　<BR>&nbsp;“h”　=　”hour”;　<BR>&nbsp;“s”　=　”second”;　<BR><BR><STRONG>&nbsp;7.函数Datediff()　</STRONG><BR>&nbsp;功能:计算某量个指定的时间差　<BR>&nbsp;格式:　datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]])　<BR>&nbsp;参数:　timeinterval　是时间单位;　date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear　是任意选项.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;fromDate　=　#8/4/99#　<BR>&nbsp;toDate　=　#1/1/2000#　<BR>&nbsp;response.write　”There　are　”　&amp;　_　<BR>&nbsp;DateDiff(“d”,fromDate,toDate)　&amp;　_　<BR>&nbsp;“　days　to　millenium　from　8/4/99.”　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:There　are　150　days　to　millenium　from　8/4/99.<BR>　<BR><STRONG>&nbsp;8.函数day()　</STRONG><BR>&nbsp;功能:返回一个整数值,对应于某月的某日　<BR>&nbsp;格式:　day(date)　<BR>&nbsp;参数:　date是一个有效的日期表达式;　<BR>&nbsp;例子&lt;%　=date(#8/4/99#)　%&gt;　<BR>&nbsp;结果:4　<BR><BR><STRONG>&nbsp;9.函数formatcurrency()　</STRONG><BR>&nbsp;功能:转换成货币格式　<BR>&nbsp;格式:　formatcurrency(expression　[,digit[,leadingdigit[,paren[,groupdigit]]]])　<BR>&nbsp;参数:　expression　是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项.　<BR>&nbsp;例子&lt;%=FormatCurrency(34.3456)%&gt;　<BR>&nbsp;结果34.35　<BR><BR><STRONG>&nbsp;10.函数Formatdatetime()</STRONG>　<BR>&nbsp;功能:格式化日期表达式/变量　<BR>&nbsp;格式:　formatdatetime(date[,nameformat])　<BR>&nbsp;参数:　date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称.　<BR>&nbsp;例子&lt;%　=formatdatetime(“08/04/99”,vblongdate)　%&gt;　<BR>&nbsp;结果:Wednesday,August　04,1999　<BR>&nbsp;说明:　<BR>&nbsp;--------------------------------------------------------------------------------<BR>&nbsp;描述<BR>&nbsp;返回表达式，此表达式已被格式化为日期或时间。　<BR>&nbsp;语法<BR>&nbsp;FormatDateTime(Date[,　NamedFormat])<BR>&nbsp;FormatDateTime　函数的语法有以下参数：<BR><BR>&nbsp;参数　描述　<BR>&nbsp;Date　必选项。要被格式化的日期表达式。　<BR>&nbsp;NamedFormat　可选项。指示所使用的日期/时间格式的数值，如果省略，则使用　vbGeneralDate。　<BR><BR><BR>&nbsp;设置<BR>&nbsp;NamedFormat　参数可以有以下值：<BR>&nbsp;常数　值　描述　<BR>&nbsp;vbGeneralDate　0　显示日期和/或时间。如果有日期部分，则将该部分显示为短日期格式。如果有时间部分，则将该部分显示为长时间格式。如果都存在，则显示所有部分。　<BR>&nbsp;vbLongDate　1　使用计算机区域设置中指定的长日期格式显示日期。　<BR>&nbsp;vbShortDate　2　使用计算机区域设置中指定的短日期格式显示日期。　<BR>&nbsp;vbLongTime　3　使用计算机区域设置中指定的时间格式显示时间。　<BR>&nbsp;vbShortTime　4　使用　24　小时格式　(hh:mm)　显示时间。　<BR><BR>&nbsp;说明<BR>&nbsp;下面例子利用　FormatDateTime　函数把表达式格式化为长日期型并且把它赋给　MyDateTime:　<BR>&nbsp;Function　GetCurrentDate　<BR>&nbsp;“FormatDateTime　把日期型格式化为长日期型。<BR>&nbsp;GetCurrentDate　=　FormatDateTime(Date,　1)　<BR>&nbsp;End　Function<BR>&nbsp;--------------------------------------------------------------------------------<BR><STRONG>11.函数Isnumeric()</STRONG>　<BR>&nbsp;功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量.　<BR>&nbsp;格式:isnumeric(expression)　<BR>&nbsp;参数:expression　是任意的变量.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;i=“234”　<BR>&nbsp;response.write　isnumeric(i)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　true.<BR>　<BR><STRONG>&nbsp;12.函数Isobject()</STRONG>　<BR>&nbsp;功能:返回一个布尔值,判断变量是否为对象的变量,　<BR>&nbsp;格式:　isobject(expression)　<BR>&nbsp;参数:　expression　是任意的变量.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;set　con　=server.creatobject(“adodb.connection”)　<BR>&nbsp;response.write　isobject(con)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　true<BR>　<BR><STRONG>&nbsp;13.函数:Lbound()</STRONG>　<BR>&nbsp;功能:返回一个数组的下界.　<BR>&nbsp;格式:Lbound(arrayname[,dimension])　<BR>&nbsp;参数:arrayname　是数组变量,dimension　是任意项　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;i　=　array(“1”,”2”,”3”)　<BR>&nbsp;response.write　lbound(i)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:0<BR><BR><STRONG>&nbsp;14.函数Lcase()</STRONG>　<BR>&nbsp;功能:将一字符类型变量的字符全部变换小写字符.　<BR>&nbsp;格式:Lcase(string)　<BR>&nbsp;参数:string是字符串变量　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;str=“THIS　is　Lcase!”　<BR>&nbsp;response.write　Lcase(str)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:this　is　lcase!　<BR><BR><STRONG>&nbsp;15.函数left()</STRONG>　<BR>&nbsp;功能:截取一个字符串的前部分;　<BR>&nbsp;格式:left(string,length)　<BR>&nbsp;参数:string字符串,length截取的长度.　<BR>&nbsp;例子:　&lt;%　=left(“this　is　a　test!”,6)　%&gt;　<BR>&nbsp;结果:this　i　<BR><BR><STRONG>&nbsp;16.函数len()</STRONG>　<BR>&nbsp;功能:返回字符串长度或者变量的字节长度　<BR>&nbsp;格式:len(string　*varname)　<BR>&nbsp;参数:string字符串;varname任意的变量名称　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;strtest=“this　is　a　test!”　<BR>&nbsp;response.write　left(strtest)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:15<BR>　<BR><STRONG>&nbsp;17.函数ltrim()</STRONG>　<BR>&nbsp;功能:去掉字符串前的空格.　<BR>&nbsp;格式:ltrim(string)　<BR>&nbsp;参数:string　字符串.　<BR>&nbsp;例子:　&lt;%　=ltrim　(“　this　is　a　test!”)　<BR>&nbsp;结果:this　is　a　test!　<BR><BR><STRONG>&nbsp;18.函数Mid()</STRONG>　<BR>&nbsp;功能:从字符串中截取字符串.　<BR>&nbsp;格式:mid(string,start　[,length])　<BR>&nbsp;参数:string字符串,start截取的起点,length要截取的长度.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;strtest=“this　is　a　test,　Today　is　Monday!”　<BR>&nbsp;response.write　mid(strtest,17,5)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:Today　<BR><BR><STRONG>&nbsp;19.函数minute()</STRONG>　<BR>&nbsp;功能:返回一数值,　表示分钟　<BR>&nbsp;格式:minute(time)　<BR>&nbsp;参数:　time是时间变量　<BR>&nbsp;例子lt;%　=minute(#12:23:34#)　%&gt;　<BR>&nbsp;结果:23　<BR><BR><STRONG>&nbsp;20.函数month()</STRONG>　<BR>&nbsp;功能:返回一数值,　表示月份　<BR>&nbsp;格式:month(time)　<BR>&nbsp;参数:time是日期变量　<BR>&nbsp;例子&lt;%　=month(#08/09/99)　%&gt;　<BR>&nbsp;结果:9　<BR><BR>&nbsp;<STRONG><FONT color=#1e90ff>21.函数monthname()</FONT>　</STRONG><BR>&nbsp;功能:返回月份的字符串(名称).　<BR>&nbsp;格式:Monthname(date　[,abb])　<BR>&nbsp;参数:　date是日期变量,abb=true时　则月份的缩写,　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　=monthname(#4/5/99#)　%&gt;　<BR>&nbsp;结果:April　<BR><BR><STRONG>&nbsp;22.函数Now()</STRONG>　<BR>&nbsp;功能:返回系统的当前时间和日期.　<BR>&nbsp;格式:now()　<BR>&nbsp;参数:无　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　=now()　%&gt;　<BR>&nbsp;结果:　05/10/00　8:45:32　pm　<BR><BR><STRONG>&nbsp;23.函数:replace()</STRONG>　<BR>&nbsp;功能:在字符串中查找,替代指定的字符串.　<BR>&nbsp;格式:replace(strtobesearched,strsearchfor,strreplacewith　[,start[,count[,compare]]])　<BR>&nbsp;参数:strtobesearched是字符串;　strsearchfor是被查找的子字符串;strreplacewith　是用来替代的子字符串.start,count,compare　是任意选项.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;strtest=“this　is　an　apple.”　<BR>&nbsp;response.write　replace(strtest,”apple”,”orange”)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:this　is　an　orange.　<BR><BR><STRONG>&nbsp;24.函数right()</STRONG>　<BR>&nbsp;功能:截取一个字符串的后部分　<BR>&nbsp;格式:right(string,length)　<BR>&nbsp;参数:string字符串,length截取的长度.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;strtest=“this　is　a　test!”　<BR>&nbsp;response.write　right(strtest,3)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:st!　<BR><BR><STRONG>&nbsp;25.函数rnd()</STRONG>　<BR>&nbsp;功能:返回一个随机数值　<BR>&nbsp;格式:rnd[(number)]　<BR>&nbsp;参数:number是任意数值.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;randomize()　<BR>&nbsp;response.write　rnd()　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:0/1数值之一,无randomize(),　则不能产生随机数.　<BR><BR><STRONG>&nbsp;26.函数round()</STRONG>　<BR>&nbsp;功能:完整数值　<BR>&nbsp;格式:round(expression[,numright])　<BR>&nbsp;参数:expression数字表达式;numright任意选项.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;i=12.33654　<BR>&nbsp;response.write　round(i)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　12　<BR><BR><STRONG>&nbsp;27.函数rtrim()</STRONG>　<BR>&nbsp;功能:去掉字符串后的空格.　<BR>&nbsp;格式:rtrim(string)　<BR>&nbsp;参数:string　是字符串　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;response.write　rtrim(“this　is　a　test!　”)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:this　is　a　test!<BR>　<BR><STRONG>&nbsp;28.函数second()</STRONG>　<BR>&nbsp;功能:返回一个整数值.　<BR>&nbsp;格式:second(time)　<BR>&nbsp;参数:time是一个有效的时间表达式;　<BR>&nbsp;例子lt;%　=second(#　12:28:30#)　%&gt;　<BR>&nbsp;结果:30<BR>　<BR><STRONG>&nbsp;29.函数strReverse()</STRONG>　<BR>&nbsp;功能:返回与原字符串排列逆向的字符串.　<BR>&nbsp;格式:strreverse(string)　<BR>&nbsp;参数:string是字符串　<BR>&nbsp;例子&lt;%　=strreverse(“this　is　a　test!”)　<BR>&nbsp;结果:!tset　a　si　siht<BR>　<BR><STRONG>&nbsp;30.函数time()</STRONG>　<BR>&nbsp;功能:返回当前系统的时间值.　<BR>&nbsp;格式:time()　<BR>&nbsp;参数:无　<BR>&nbsp;结果:9:58:28　Am<BR>　<BR><STRONG>&nbsp;31.函数trim()</STRONG>　<BR>&nbsp;功能:删去字符串前,后的空格.　<BR>&nbsp;格式:trim(string)　<BR>&nbsp;参数:string　字符串.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;strtest=“　this　is　a　test!　”　<BR>&nbsp;response.write　trim(strtest)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:this　is　a　test!<BR>　<BR><STRONG>&nbsp;32.函数UBound()　</STRONG><BR>&nbsp;功能:返回一个数组的上界.　<BR>&nbsp;格式:Ubound(expression　[,dimension])　<BR>&nbsp;参数:expression　是数组表达式/数组变量,dimension　是任意项　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;i　=　array(“1”,”2”,”3”)　<BR>&nbsp;response.write　ubound(i)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　2　<BR><BR><STRONG>&nbsp;33.函数:UCase()　</STRONG><BR>&nbsp;功能:将一字符类型变量的字符全部变换成大写字符.　<BR>&nbsp;格式:Ucase(string)　<BR>&nbsp;参数:string是字符串变量　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;str=“THIS　is　Lcase!”　<BR>&nbsp;response.write　Lcase(str)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:THIS　IS　LCASE!　<BR><BR><STRONG>&nbsp;34.函数Vartype()</STRONG>　<BR>&nbsp;功能:返回变量的常量代码(整数)　<BR>&nbsp;格式:Vartype(varname)　<BR>&nbsp;参数:varname是任何类型的变量名称.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;i=5　<BR>&nbsp;response.write　vartype(i)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:2　(2表示整数,须要参考ASP常量代码.)　<BR><BR><STRONG>&nbsp;35.函数Weekday()</STRONG>　<BR>&nbsp;功能:返回一个整数,对应一周中的第几天.　<BR>&nbsp;格式:Weekday(date　[,firstofweek])　<BR>&nbsp;参数:　date为日期变量,firstofweek为任选项.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;d=　#　5/9/00　#　<BR>&nbsp;response.write　weekday(d)　%&gt;　<BR>&nbsp;结果:3(3　表示是星期二)　<BR><BR>&nbsp;<STRONG>36.函数weekdayname()　</STRONG><BR>&nbsp;功能:返回字符串,对应星期几.　<BR>&nbsp;格式:weekdayname(weekday[,abb[,firstdayofweek]])　<BR>&nbsp;参数:weekday为日期变量,abb,firstdayofweek为任选项.　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　<BR>&nbsp;d　=　#8/4/99#　<BR>&nbsp;response.write　weekdayname(d)　<BR>&nbsp;%&gt;　<BR>&nbsp;结果:　Wednesday　<BR><BR>&nbsp;<STRONG>37.函数year()</STRONG>　<BR>&nbsp;功能:返回日期表达式所在的年份.　<BR>&nbsp;格式:year(date)　<BR>&nbsp;参数:　date是有效的日期表达式　<BR>&nbsp;例子:　<BR>&nbsp;&lt;%　=year(#8/9/99#)　%&gt;　<BR>&nbsp;结果:1999　<BR>&nbsp;38.函数Mod()功能:取余数.<BR>&nbsp;例子:3　Mod　2　<BR>&nbsp;结果:1 <!--内容页广告广告代码开始--><img src ="http://www.cnitblog.com/ffan/aggbug/1487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-08-12 00:16 <a href="http://www.cnitblog.com/ffan/archive/2005/08/12/1487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式语法</title><link>http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html</link><dc:creator>ffan</dc:creator><author>ffan</author><pubDate>Mon, 01 Aug 2005 02:15:00 GMT</pubDate><guid>http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html</guid><wfw:comment>http://www.cnitblog.com/ffan/comments/1235.html</wfw:comment><comments>http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ffan/comments/commentRss/1235.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ffan/services/trackbacks/1235.html</trackback:ping><description><![CDATA[<HR>
 
<P></P>
<P><FONT size=2>关键字： 正则表达式，Regular Expression</FONT></P>
<P><FONT size=2>原著：笑容</FONT></P>
<P><FONT size=2>创作于：2004年05月03日<BR>最后更新：2004年05月04日 21:12<BR>版权声明：使用</FONT><FONT size=2><A href="http://www.creativecommons.cn/licenses/by-nc/1.0/">创作公用版权协议</A></FONT></P>
<P><FONT size=2>引用地址：&lt;a href="http://www.ixue.net/programer/regular_expression.htm"&gt;正则表达式(regular expression)&lt;/a&gt;</FONT></P>
<P><A href="http://www.ixue.net/">返回</A> </P>
<HR>

<P><B>前言</B></P>
<P>正则表达式是烦琐的，但是强大的，学会之后的应用会让你除了提高效率外，会给你带来绝对的成就感。只要认真去阅读这些资料，加上应用的时候进行一定的参考，掌握正则表达式不是问题。</P>
<P><B>索引</B></P>
<P><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#1._引子"><FONT size=2>1._引子</FONT></A><FONT size=2><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#2._正则表达式的历史">2._正则表达式的历史</A><BR></FONT><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3._正则表达式定义"><FONT size=2>3._正则表达式定义</FONT></A></P>
<BLOCKQUOTE>
<P><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.1_普通字符"><FONT size=2>3.1_普通字符</FONT></A><FONT size=2><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.2_非打印字符">3.2_非打印字符</A><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.3_特殊字符">3.3_特殊字符</A><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.4_限定符">3.4_限定符</A><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.5_定位符">3.5_定位符</A><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.6_选择">3.6_选择</A><BR></FONT><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#3.7_后向引用"><FONT size=2>3.7_后向引用</FONT></A></P></BLOCKQUOTE>
<P><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#4._各种操作符的运算优先级"><FONT size=2>4._各种操作符的运算优先级</FONT></A><FONT size=2><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#5._全部符号解释">5._全部符号解释</A><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#6._部分例子">6._部分例子</A><BR></FONT><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#7._正则表达式匹配规则"><FONT size=2>7._正则表达式匹配规则</FONT></A></P>
<BLOCKQUOTE>
<P><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#7.1_基本模式匹配"><FONT size=2>7.1_基本模式匹配</FONT></A><FONT size=2><BR><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#7.2_字符簇">7.2_字符簇</A><BR></FONT><A href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#7.3_确定重复出现"><FONT size=2>7.3_确定重复出现</FONT></A></P></BLOCKQUOTE>
<HR>

<H2><A name=1._引子>1. 引子</A></H2>
<P>　　目前，正则表达式已经在很多软件中得到广泛的应用，包括*nix（Linux, Unix等），HP等操作系统，PHP，C#，Java等开发环境，以及很多的应用软件中，都可以看到正则表达式的影子。</P>
<P>　　正则表达式的使用，可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大，造成了正则表达式代码的难度较大，学习起来也不是很容易，所以需要付出一些努力才行，入门之后参照一定的参考，使用起来还是比较简单有效的。</P>
<BLOCKQUOTE>
<P>例子：<SPAN style="BACKGROUND-COLOR: #00ffff"> ^.+@.+\\..+$ </SPAN></P></BLOCKQUOTE>
<P>　　这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。</P>
<P>　　注意：这里的第7部分跟前面的内容看起来似乎有些重复，目的是把前面表格里的部分重新描述了一次，目的是让这些内容更容易理解。</P>
<H2><B><A name=2._正则表达式的历史>2. 正则表达式的历史</A></B></H2>
<DIV id=nstext valign="bottom">　　正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 
<P>　　1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上，发表了一篇标题为“神经网事件的表示法”的论文，引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式，因此采用“正则表达式”这个术语。</P>
<P>　　随后，发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究，Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 <I>qed </I>编辑器。</P>
<P>　　如他们所说，剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。</P></DIV>
<P>　</P>
<H2><B><A name=3._正则表达式定义>3. 正则表达式定义</A></B></H2>
<P>　　正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。</P>
<BLOCKQUOTE>
<UL>
<LI><SPAN style="BACKGROUND-COLOR: #ffff00">列目录时，　dir *.txt或ls *.txt中的*.txt就</SPAN><FONT color=#ff0000><SPAN style="BACKGROUND-COLOR: #ffff00">不</SPAN></FONT><SPAN style="BACKGROUND-COLOR: #ffff00">是一个正则表达式,因为这里*与正则式的*的含义是不同的。</SPAN> </LI></UL></BLOCKQUOTE>
<P>　　正则表达式是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</P>
<H3><B><A name=3.1_普通字符>3.1 普通字符</A></B></H3>
<P>　　由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。 </P>
<H3><A name=3.2_非打印字符>3.2 非打印字符</A></H3>
<P>
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>字符 </TH>
<TH style="FONT-SIZE: 12px" align=left>含义</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">\cx </TD>
<TD style="FONT-SIZE: 12px">匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\f </TD>
<TD style="FONT-SIZE: 12px">匹配一个换页符。等价于 \x0c 和 \cL。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\n </TD>
<TD style="FONT-SIZE: 12px">匹配一个换行符。等价于 \x0a 和 \cJ。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\r </TD>
<TD style="FONT-SIZE: 12px">匹配一个回车符。等价于 \x0d 和 \cM。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\s </TD>
<TD style="FONT-SIZE: 12px">匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\S </TD>
<TD style="FONT-SIZE: 12px">匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\t </TD>
<TD style="FONT-SIZE: 12px">匹配一个制表符。等价于 \x09 和 \cI。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\v </TD>
<TD style="FONT-SIZE: 12px">匹配一个垂直制表符。等价于 \x0b 和 \cK。</TD></TR></TBODY></TABLE><BR>　 </P>
<H3><A name=3.3_特殊字符>3.3 特殊字符</A></H3>
<P>　　所谓特殊字符，就是一些有特殊含义的字符，如上面说的"*.txt"中的*，简单的说就是表示任何字符串的意思。如果要查找文件名中有＊的文件，则需要对＊进行转义，即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。 </P>
<P>　</P>
<P>
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>特别字符</TH>
<TH style="FONT-SIZE: 12px" align=left>说明</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">$</TD>
<TD style="FONT-SIZE: 12px">匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">( )</TD>
<TD style="FONT-SIZE: 12px">标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用 \( 和 \)。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">*</TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">+</TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">.</TD>
<TD style="FONT-SIZE: 12px">匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">[ </TD>
<TD style="FONT-SIZE: 12px">标记一个中括号表达式的开始。要匹配 [，请使用 \[。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">?</TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? 字符，请使用 \?。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\</TD>
<TD style="FONT-SIZE: 12px">将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\"，而 '\(' 则匹配 "("。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">^</TD>
<TD style="FONT-SIZE: 12px">匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{</TD>
<TD style="FONT-SIZE: 12px">标记限定符表达式的开始。要匹配 {，请使用 \{。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">|</TD>
<TD style="FONT-SIZE: 12px">指明两项之间的一个选择。要匹配 |，请使用 \|。</TD></TR></TBODY></TABLE></P>
<BLOCKQUOTE>
<UL>
<LI><STRONG style="FONT-WEIGHT: 400; BACKGROUND-COLOR: #ffff00">　　构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。</STRONG> </LI></UL></BLOCKQUOTE>
<P>　</P>
<H3><A name=3.4_限定符>3.4 限定符</A></H3>
<P>　　限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。<BR>*、+和?限定符都是贪婪的，因为它们会尽可能多的匹配文字，只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。<BR>　　正则表达式的限定符有：<BR>　 
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>字符 </TH>
<TH style="FONT-SIZE: 12px" align=left>描述</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">* </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">+ </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">? </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n} </TD>
<TD style="FONT-SIZE: 12px">n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n,} </TD>
<TD style="FONT-SIZE: 12px">n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n,m} </TD>
<TD style="FONT-SIZE: 12px">m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</TD></TR></TBODY></TABLE></P>
<H3><A name=3.5_定位符>3.5 定位符</A></H3>
<P>　　用来描述字符串或单词的边界，^和$分别指字符串的开始与结束，\b描述单词的前或后边界，\B表示非单词边界。<FONT color=#ff0000>不能对定位符使用限定符。</FONT> </P>
<H3><A name=3.6_选择>3.6 选择</A></H3>
<P>　　用圆括号将所有选择项括起来，相邻的选择项之间用|分隔。但用圆括号会有一个副作用，是相关的匹配会被缓存，此时可用?:放在第一个选项前来消除这种副作用。<BR>　　其中?:是非捕获元之一，还有两个非捕获元是?=和?!，这两个还有更多的含义，前者为正向预查，在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串，后者为负向预查，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。 </P>
<H3><A name=3.7_后向引用>3.7 后向引用</A></H3>
<P>　　对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中，所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始，连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问，其中 n 为一个标识特定缓冲区的一位或两位十进制数。<BR>　　可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对相关匹配的保存。 </P>
<H2><A name=4._各种操作符的运算优先级>4. 各种操作符的运算优先级</A></H2>
<P>　　相同优先级的从左到右进行运算，不同优先级的运算先高后低。各种操作符的优先级从高到低如下：<BR>　 
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>操作符 </TH>
<TH style="FONT-SIZE: 12px" align=left>描述</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">\ </TD>
<TD style="FONT-SIZE: 12px">转义符</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">(), (?:), (?=), [] </TD>
<TD style="FONT-SIZE: 12px">圆括号和方括号</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">*, +, ?, {n}, {n,}, {n,m} </TD>
<TD style="FONT-SIZE: 12px">限定符</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">^, $, \anymetacharacter </TD>
<TD style="FONT-SIZE: 12px">位置和顺序</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">| </TD>
<TD style="FONT-SIZE: 12px">“或”操作</TD></TR></TBODY></TABLE></P>
<H2><A name=5._全部符号解释>5. 全部符号解释</A></H2>
<P>
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>字符 </TH>
<TH style="FONT-SIZE: 12px" align=left>描述</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">\ </TD>
<TD style="FONT-SIZE: 12px">将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">^ </TD>
<TD style="FONT-SIZE: 12px">匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">$ </TD>
<TD style="FONT-SIZE: 12px">匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">* </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">+ </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">? </TD>
<TD style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n} </TD>
<TD style="FONT-SIZE: 12px">n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n,} </TD>
<TD style="FONT-SIZE: 12px">n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">{n,m} </TD>
<TD style="FONT-SIZE: 12px">m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">? </TD>
<TD style="FONT-SIZE: 12px">当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">. </TD>
<TD style="FONT-SIZE: 12px">匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">(pattern) </TD>
<TD style="FONT-SIZE: 12px">匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">(?:pattern) </TD>
<TD style="FONT-SIZE: 12px">匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">(?=pattern) </TD>
<TD style="FONT-SIZE: 12px">正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">(?!pattern) </TD>
<TD style="FONT-SIZE: 12px">负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">x|y </TD>
<TD style="FONT-SIZE: 12px">匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">[xyz] </TD>
<TD style="FONT-SIZE: 12px">字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">[^xyz] </TD>
<TD style="FONT-SIZE: 12px">负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">[a-z] </TD>
<TD style="FONT-SIZE: 12px">字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">[^a-z] </TD>
<TD style="FONT-SIZE: 12px">负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\b </TD>
<TD style="FONT-SIZE: 12px">匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\B </TD>
<TD style="FONT-SIZE: 12px">匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\cx </TD>
<TD style="FONT-SIZE: 12px">匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\d </TD>
<TD style="FONT-SIZE: 12px">匹配一个数字字符。等价于 [0-9]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\D </TD>
<TD style="FONT-SIZE: 12px">匹配一个非数字字符。等价于 [^0-9]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\f </TD>
<TD style="FONT-SIZE: 12px">匹配一个换页符。等价于 \x0c 和 \cL。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\n </TD>
<TD style="FONT-SIZE: 12px">匹配一个换行符。等价于 \x0a 和 \cJ。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\r </TD>
<TD style="FONT-SIZE: 12px">匹配一个回车符。等价于 \x0d 和 \cM。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\s </TD>
<TD style="FONT-SIZE: 12px">匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\S </TD>
<TD style="FONT-SIZE: 12px">匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\t </TD>
<TD style="FONT-SIZE: 12px">匹配一个制表符。等价于 \x09 和 \cI。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\v </TD>
<TD style="FONT-SIZE: 12px">匹配一个垂直制表符。等价于 \x0b 和 \cK。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\w </TD>
<TD style="FONT-SIZE: 12px">匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\W </TD>
<TD style="FONT-SIZE: 12px">匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\xn </TD>
<TD style="FONT-SIZE: 12px">匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。.</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\num </TD>
<TD style="FONT-SIZE: 12px">匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\n </TD>
<TD style="FONT-SIZE: 12px">标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\nm </TD>
<TD style="FONT-SIZE: 12px">标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\nml </TD>
<TD style="FONT-SIZE: 12px">如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">\un </TD>
<TD style="FONT-SIZE: 12px">匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。</TD></TR></TBODY></TABLE></P>
<P>　</P>
<H2><A name=6._部分例子>6. 部分例子</A></H2>
<P>
<TABLE cellSpacing=1 cellPadding=3 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 12px" align=left>正则表达式</TH>
<TH style="FONT-SIZE: 12px" align=left>说明</TH></TR>
<TR>
<TD style="FONT-SIZE: 12px">/\b([a-z]+) \1\b/gi</TD>
<TD style="FONT-SIZE: 12px">一个单词连续出现的位置</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ </TD>
<TD style="FONT-SIZE: 12px">将一个URL解析为协议、域、端口及相对路径</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/^(?:Chapter|Section) [1-9][0-9]{0,1}$/</TD>
<TD style="FONT-SIZE: 12px">定位章节的位置</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/[-a-z]/</TD>
<TD style="FONT-SIZE: 12px">A至z共26个字母再加一个-号。</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/ter\b/</TD>
<TD style="FONT-SIZE: 12px">可匹配chapter，而不能terminal</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/\Bapt/</TD>
<TD style="FONT-SIZE: 12px">可匹配chapter，而不能aptitude</TD></TR>
<TR>
<TD style="FONT-SIZE: 12px">/Windows(?=95 |98 |NT )/</TD>
<TD style="FONT-SIZE: 12px">可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后，从Windows后面开始进行下一次的检索匹配。</TD></TR></TBODY></TABLE></P>
<P>　</P>
<H2><A name=7._正则表达式匹配规则>7. 正则表达式匹配规则</A></H2>
<P><B><A name=7.1_基本模式匹配>7.1 基本模式匹配</A></B><BR><BR>　　一切从最基本的开始。模式，是正规表达式最基本的元素，它们是一组描述字符串特征的字符。模式可以很简单，由普通的字符串组成，也可以非常复杂，往往用特殊的字符表示一个范围内的字符、重复出现，或表示上下文。例如：</P>
<BLOCKQUOTE>
<P>^once </P></BLOCKQUOTE>
<P>　　这个模式包含一个特殊的字符^，表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配，与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样，$符号用来匹配那些以给定模式结尾的字符串。</P>
<BLOCKQUOTE>
<P>bucket$ </P></BLOCKQUOTE>
<P>　　这个模式与"Who kept all of this cash in a bucket"匹配，与"buckets"不匹配。字符^和$同时使用时，表示精确匹配（字符串与模式一样）。例如：</P>
<BLOCKQUOTE>
<P>^bucket$ </P></BLOCKQUOTE>
<P>　　只匹配字符串"bucket"。如果一个模式不包括^和$，那么它与任何包含该模式的字符串匹配。例如：模式</P>
<BLOCKQUOTE>
<P>once </P></BLOCKQUOTE>
<P>与字符串</P>
<BLOCKQUOTE>
<P>There once was a man from NewYork<BR>Who kept all of his cash in a bucket.</P></BLOCKQUOTE>
<P>是匹配的。<BR><BR>　　在该模式中的字母(o-n-c-e)是字面的字符，也就是说，他们表示该字母本身，数字也是一样的。其他一些稍微复杂的字符，如标点符号和白字符（空格、制表符等），要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是：\t。所以如果我们要检测一个字符串是否以制表符开头，可以用这个模式：</P>
<BLOCKQUOTE>
<P>^\t </P></BLOCKQUOTE>
<P>类似的，用\n表示“新行”，\r表示回车。其他的特殊符号，可以用在前面加上反斜杠，如反斜杠本身用\\表示，句号.用\.表示，以此类推。<BR><BR><B><A name=7.2_字符簇>7.2 字符簇</A></B><BR><BR>在INTERNET的程序中，正规表达式通常用来验证用户的输入。当用户提交一个FORM以后，要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效，用普通的基于字面的字符是不够的。<BR><BR>所以要用一种更自由的描述我们要的模式的办法，它就是字符簇。要建立一个表示所有元音字符的字符簇，就把所有的元音字符放在一个方括号里：</P>
<BLOCKQUOTE>
<P>[AaEeIiOoUu] </P></BLOCKQUOTE>
<P>这个模式与任何元音字符匹配，但只能表示一个字符。用连字号可以表示一个字符的范围，如：</P>
<BLOCKQUOTE>
<P>[a-z] //匹配所有的小写字母 <BR>[A-Z] //匹配所有的大写字母 <BR>[a-zA-Z] //匹配所有的字母 <BR>[0-9] //匹配所有的数字 <BR>[0-9\.\-] //匹配所有的数字，句号和减号 <BR>[ \f\r\t\n] //匹配所有的白字符 </P></BLOCKQUOTE>
<P>同样的，这些也只表示一个字符，这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串，比如"z2"、"t6"或"g7"，但不是"ab2"、"r2d3" 或"b52"的话，用这个模式：</P>
<BLOCKQUOTE>
<P>^[a-z][0-9]$ </P></BLOCKQUOTE>
<P>尽管[a-z]代表26个字母的范围，但在这里它只能与第一个字符是小写字母的字符串匹配。<BR><BR>前面曾经提到^表示字符串的开头，但它还有另外一个含义。当在一组方括号里使用^是，它表示“非”或“排除”的意思，常常用来剔除某个字符。还用前面的例子，我们要求第一个字符不能是数字：</P>
<BLOCKQUOTE>
<P>^[^0-9][0-9]$ </P></BLOCKQUOTE>
<P>这个模式与"&amp;5"、"g7"及"-2"是匹配的，但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子：</P>
<BLOCKQUOTE>
<P>[^a-z] //除了小写字母以外的所有字符 <BR>[^\\\/\^] //除了(\)(/)(^)之外的所有字符 <BR>[^\"\'] //除了双引号(")和单引号(')之外的所有字符 </P></BLOCKQUOTE>
<P>特殊字符"." (点，句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。模式"."可以匹配任何字符串，除了空串和只包括一个“新行”的字符串。<BR><BR>PHP的正规表达式有一些内置的通用字符簇，列表如下：</P>
<BLOCKQUOTE>
<P>字符簇 含义 <BR>[[:alpha:]] 任何字母 <BR>[[:digit:]] 任何数字 <BR>[[:alnum:]] 任何字母和数字 <BR>[[:space:]] 任何白字符 <BR>[[:upper:]] 任何大写字母 <BR>[[:lower:]] 任何小写字母 <BR>[[:punct:]] 任何标点符号 <BR>[[:xdigit:]] 任何16进制的数字，相当于[0-9a-fA-F] </P></BLOCKQUOTE>
<P><B><A name=7.3_确定重复出现>7.3 确定重复出现</A></B><BR><BR>到现在为止，你已经知道如何去匹配一个字母或数字，但更多的情况下，可能要匹配一个单词或一组数字。一个单词有若干个字母组成，一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。 </P>
<BLOCKQUOTE>
<P>字符簇 含义 <BR>^[a-zA-Z_]$ 所有的字母和下划线 <BR>^[[:alpha:]]{3}$ 所有的3个字母的单词 <BR>^a$ 字母a <BR>^a{4}$ aaaa <BR>^a{2,4}$ aa,aaa或aaaa <BR>^a{1,3}$ a,aa或aaa <BR>^a{2,}$ 包含多于两个a的字符串 <BR>^a{2,} 如：aardvark和aaab，但apple不行 <BR>a{2,} 如：baad和aaa，但Nantucket不行 <BR>\t{2} 两个制表符 <BR>.{2} 所有的两个字符 </P></BLOCKQUOTE>
<P>这些例子描述了花括号的三种不同的用法。一个数字，{x}的意思是“前面的字符或字符簇只出现x次”；一个数字加逗号，{x,}的意思是“前面的内容出现x或更多的次数”；两个用逗号分隔的数字，{x,y}表示“前面的内容至少出现x次，但不超过y次”。我们可以把模式扩展到更多的单词或数字：</P>
<BLOCKQUOTE>
<P>^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 <BR>^[0-9]{1,}$ //所有的正数 <BR>^\-{0,1}[0-9]{1,}$ //所有的整数 <BR>^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数 </P></BLOCKQUOTE>
<P>最后一个例子不太好理解，是吗？这么看吧：与所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,})，并且没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。<BR><BR>特殊字符"?"与{0,1}是相等的，它们都代表着：“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为：</P>
<BLOCKQUOTE>
<P>^\-?[0-9]{0,}\.?[0-9]{0,}$ </P></BLOCKQUOTE>
<P>特殊字符"*"与{0,}是相等的，它们都代表着“0个或多个前面的内容”。最后，字符"+"与 {1,}是相等的，表示“1个或多个前面的内容”，所以上面的4个例子可以写成：</P>
<BLOCKQUOTE>
<P>^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 <BR>^[0-9]+$ //所有的正数 <BR>^\-?[0-9]+$ //所有的整数 <BR>^\-?[0-9]*\.?[0-9]*$ //所有的小数 </P></BLOCKQUOTE>
<P>当然这并不能从技术上降低正规表达式的复杂性，但可以使它们更容易阅读。</P>
<P>　</P>
<P>参考文献：<BR><A href="http://www.soulogic.com/code/doc/RegularExpressions/">JScript&nbsp;和&nbsp;VBScript&nbsp;正则表达式</A></P><img src ="http://www.cnitblog.com/ffan/aggbug/1235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ffan/" target="_blank">ffan</a> 2005-08-01 10:15 <a href="http://www.cnitblog.com/ffan/archive/2005/08/01/1235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>