2009年06月26日

[转]access日期和时间函数
————————————————

设置当前日期或时间。 Date ,Now, Time
计算日期: DateAdd, DateDiff, DatePart
返回日期: DateSerial, DateValue
返回时间: TimeSerial, TimeValue
设置日期或时间: Date, Time
计时: Timer
在帮助里有~
—————————

—————————

Time 函数

返回一个指明当前系统时间的 Variant (Date)。
语法
Time
说明
为了设置系统时间,请使用 Time 语句。Time 函数示例
本示例使用 Time 函数返回系统当前的时间。
Dim MyTime
MyTime = Time ’ 返回系统当前的时间。

DateAdd 函数

返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。
语法
DateAdd(interval, number, date)
DateAdd 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,是所要加上去的时间间隔。
number 必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。
date 必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。
设置
interval 参数具有以下设定值:
设置 描述
==yyyy 年
==q 季
==m 月
==y 一年的日数
==d 日
==w 一周的日数
==ww 周
==h 时
==n 分钟
==s 秒
说明
可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。
为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。
DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月:
DateAdd(m, 1, 31-Jan-95)
上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。
如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。
如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。
注意 DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
DateAdd 函数示例
本示例先取得一个日期,再用 DateAdd 函数显示未来数月后的日期。
Dim FirstDate As Date ’ 声明变量。
Dim IntervalType As String
Dim Number As Integer
Dim Msg
IntervalType = "m" ’ "m"指定以“月份”作为间隔。
FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of months to add")
Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
MsgBox Msg

——————————————————————————–

DateDiff 函数

返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。
语法
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
DateDiff 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可?gt;>V付ㄒ桓鲂瞧诘牡谝惶斓某JH绻从柚付ǎ蛞孕瞧谌瘴谝惶臁?nbsp;
firstweekofyear 可?gt;>V付ㄒ荒甑牡谝恢艿某JH绻从柚付ǎ蛞园?nbsp;1 月 1 日的星期为第一周。
设置
interval 参数的设定值如下:
设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
firstdayofweek 参数的设定值如下:
常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
常数 值 描述
vbUseSystem 0 用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。
说明
DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。
为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时, DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。
如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。
firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。
如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。
在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。
DateDiff 函数示例
本示例使用 DateDiff 函数来显示某个日期与今日相差几天。
Dim TheDate As Date ’ 声明变量。
Dim Msg
TheDate = InputBox("Enter a date")
Msg = "Days from today: " & DateDiff("d", Now, TheDate)
MsgBox Msg

——————————————————————————–

DatePart 函数

返回一个包含已知日期的指定时间部分的 Variant (Integer)。
语法
DatePart(interval, date[,firstdayofweek[, firstweekofyear]])
DatePart 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,是要返回的时间间隔。
date 必要。要计算的 Variant (Date) 值。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
Firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含1月1日的星期为第一周。

设置 interval 参数的设定值如下:
设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
firstdayofweek 参数的设定值如下:
常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 参数的设定值如下:
常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。
说明
DatePart 函数可以用来计算日期并返回指定的时间间隔。例如,可以使用DatePart 计算某个日期是星期几或目前为几点钟。
firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。
如果date是日期文字,则指定的年份成为该日期的固定部分。如果date用双引号(" ")括起来,且年份略而不提,则在每次计算date表达式时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

2008年11月15日

蔽窗口菜单栏查看原文件

限制查看网页源文件的代码
网页制作者经常遇到精心制作的javascript特效被别人抄袭,而自己对此却无可奈何的情况。面对这一困扰,有没有方法可以解决呢?使用ASP、JSP等服务器端编程技术可以实现对网页源代码的保护,但目前国内网站所提供的免费个人主页空间一般都不提供对服务器端编程的支持,所以对于这些用户,要禁止访问者查看网页源代码就只能在客户端编程上下工夫了。

查看源代码的方式

要禁止访问者查看网页源代码,我们首先要了解一下查看源代码的方式(以IE 5.0为例)。一是右键菜单方式; 二是窗口菜单栏查看方式,即选择"查看"*"源文件"方式。要彻底禁止访问者查看网页源代码,就必须屏蔽这2种查看源代码的方式。

屏蔽右键菜单查看方式

现在,很多网页采用如下代码屏蔽右键菜单:

< Script Language=javascript>
function Click(){
if(event.button==2){alert
(‘版权所有(C)2001 XXX工作室’);
}}
document.onmousedown=Click;
< /Script>

实际上"button"有8个属性值(即0~7),"button==2"只是表示按下鼠标右键,所以上述代码实际上只能限制点击鼠标右键的情况,至于其他5种方式,如同时按左右键、中间键、左和中间键、右和中间键和按所有键的情况就不能限制了。所以在弹出版权信息提示窗口后(如图3所示),按"确定"按钮仍然会出现快捷菜单。针对这种情况,其实只要将"event.button==2"改为"event.button!=1"就可以做到无论用何种鼠标点击方式,均不出现右键菜单了。

不过即使进行上述修改后,也并不能彻底禁止右键菜单的出现。用户只要在页面上按下右键,出现版权信息提示窗口后,不松开右键(即继续保持按下状态),再将鼠标指针移动到版权信息提示窗口的"确定"按钮上,同时按下左键,然后再松开鼠标左键,提示窗口即消失。此时再松开鼠标右键,右键菜单弹出,这样就又可以查看网页源文件了。

那么有没有办法彻底禁止右键快捷菜单的出现呢?其实只要将上述代码做如下修改即可。

< Script Language=javascript>
function Click(){
alert(‘版权所有(C)2001 XXX工作室’);
window.event.returnvalue=false;
}
document.oncontextmenu=Click;
< /Script>

这样无论采取什么方式点击鼠标,都不会再出现快捷菜单了。不过值得注意的是,如果访问者直接在浏览器地址栏中键入"javascript:alert(document.oncontextmenu=”)",就可以解除对右键菜单的屏蔽。对这类访问者怎样防范呢?其实,把地址栏隐藏掉就可以了,具体方法见本文介绍的"屏蔽窗口菜单栏查看方式"。

屏蔽窗口菜单栏查看方式

制作过网页的朋友都知道,对新打开窗口的各种属性可以进行控制,具体包括控制菜单栏、滚动条及地址栏是否可见等。如果把父窗口关闭,并将新打开窗口的菜单栏和地址栏隐藏,不就可以屏蔽窗口菜单栏查看方式了吗?实现代码如下:

< Head>
< Object id=closes type="application/x-oleobject"
classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
< Param name="Command" value="Close">
< /Object>
< /Head>
< Body>
< Script Language=javascript>
closes.Click()
window.open("XXX.htm","","menubar=no,location=no,
scrollbars=yes,resizable=yes")
< /Script>
< /Body>

这种方法的原理就是首先将自己网站的首页制作成index.htm形式,把首页设计成一个过渡页。然后将自己的真正主页制作成default.htm形式(具体实现过程见本文所附源代码)。这样访问者无论如何也无法查看网页源代码了。这不仅仅保护了您的版权,也为进一步开发提供了保障。通过此方法,您可以结合Cookie技术,真正做到限制用户浏览网页,从而避免主页资料被非法访问者访问。

附:源代码清单
index.htm
< Head>
< Object id=closes type="application/x-oleobject" classid="clsid:
adb880a6-d8ff-11cf-9377-00aa003b7a11">
< Param name="Command" value="Close">
< /Object>
< /Head>
< Body>
< Script Language=javascript>
closes.Click()
window.open("defalut.htm","","menubar=no,location=no,
scrollbars=yes,resizable=yes")
< /Script>
< /Body>
default.htm
< Html>
< Head>
< Script Language=javascript>
function Click(){
alert(‘版权所有(C)2001 XXX工作室’);
window.event.returnvalue=false;
}
document.oncontextmenu=Click;
< /Script>
< /Head>
< Body>
… …
< /Body>
< /Html>

/** * 屏蔽鼠标右键,F1帮助和常用快捷键 * author: huangyuyuan * date: 2004-09-10 */
<script language="Javascript"><!–
//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
//Author: meizz(梅花雨) 2002-6-18
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键
function window.onhelp(){return false} //屏蔽F1帮助
function document.onkeydown()
{
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
(window.event.keyCode==39))) //屏蔽 Alt+ 方向键 →
{
alert("不准你使用ALT+方向键前进或后退网页!");
event.returnValue=false;
}
/* 注:这还不是真正地屏蔽 Alt+ 方向键,
因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116)|| //屏蔽 F5 刷新键
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11
if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽 Ctrl+n
if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽 shift+F10
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)) //屏蔽Alt+F4
{
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;
}
}
–>
</script>

2008年05月19日

5.12地震给四川人民带来了巨大灾难,5月19日到5月21日为全国哀悼日,有很多网站界面今天都变成了黑白色,从而纪念那些在地震中死去的逝者。对于普通的站长来说,对于灾难并不能多做些什么,但可以做到将自己的网站也变成黑白色,从而缅怀那些地震逝者。
  
  如果用传统的方法将网站变成黑白色非常的麻烦,需要更换页面的文件,并且要对图片进行更改。但如果自己的网站支持CSS的话,一切变得很简单。只要是符合w3标准的网页,在CSS文件的最前面加上一行代码就可以了,这段代码使用的是CSS滤镜,将网页中的色彩部分过滤掉。

html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }(不换行)

  加上代码之后,再次刷新网页就会发现页面已经变成黑白的了(配图)。还在等什么,赶快给自己的网站加上一行代码,变成黑白色,一起来缅怀在地震中去世的人。

2008年01月08日

HTML标签详解

HTML指令详解

结构
<html>
<head>
<title>标题<title>
</head>
<body>……….文件内容……….
</body>
</html>
1.文件标题
<title>……….</title>

2.文件更新–<meta>
 【1】10秒后自动更新一次
  <meta http-equiv="refresh" content=10>
 【2】10秒後自动连结到另一文件
  <meta http-equiv="refresh" content="10;URL=欲连结文件之URL">

3.查询用表单–<isindex>
   若欲设定查询栏位前的提示文字:
  <isindex prompt="提示文字">
4.预设的基准路径–<base>
<base href="放置文件的主机之URL">

版面
1.标题文字 <h#>……….</h#> #=1~6;h1为最大字,h6为最小字
2.字体变化 <font>……….</font>
【1】字体大小 <font size=#>……….</font> #=1~7;数字愈大字也愈大
【2】指定字型 <font face="字型名称">……….</font>
【3】文字颜色 <font color=#rrggbb>……….</font> rr:表红色(red)色码
gg:表绿色(green)色码 bb:表蓝色(blue)色码
3.显示小字体 <small>……….</small>
4.显示大字体 <big>……….</big>
5.粗体字 <b>……….</b>
6.斜体字 <i>……….</i>
7.打字机字体 <tt>……….</tt>
8.底线 <u>……….</u>
9.删除线 <strike>……….</strike>
10.下标字 <sub>……….</sub>
11.上标字 <sup>……….</sup>
12.文字闪烁效果 <blink>……….</blink>
13.换行 <br>
14.分段 <p>
15.文字的对齐方向 <p align="#"> #号可为 left:表向左对齐(预设值) center:表向中对齐
right:表向右对齐 P.S.<p align="#">之後的文字都会以所设的对齐方式显示, 直到出现另一个
<p align="#">改变其对齐方向,或遇到 <hr>?<h#>标签时会自动设回预设的向左对齐。
16.分隔线 <hr>
【1】分隔线的粗细 <hr size=点数>
【2】分隔线的宽度 <hr size=点数或百分比>
【3】分隔线对齐方向 <hr align="#"> #号可为 left:表向左对齐(预设值)
center:表向中对齐 right:表向右对齐
【4】分隔线的颜色 <hr color=#rrggbb>
【5】实心分隔线 <hr noshade>

17.向中对齐 <center>……….</center>
18.依原始样式显示 <pre>……….</pre>
19.<body>指令的属性
【1】背景颜色 — bgcolor <body bgcolor=#rrggbb>
【2】背景图案 — background <body background="图形文件名">
【3】设定背景图案不会卷动 — bgproperties <body bgproperties=fixed>
【4】文件内容文字的颜色 — text <body text=#rrggbb>
【5】超连结文字颜色 — link <body link=#rrggbb>
【6】正被选取的超连结文字颜色 — vlink <body vlink=#rrggbb>
【7】已连结过的超连结文字颜色 — alink <body alink=#rrggbb>
20.注解 <!–……….–>21.特殊字元表示法
符 号   语 法
<    &lt
>    &gt
&     &amp
"    &quot
空白   &nbsp
 

图片
1.插入图片 <img src="图形文件名">
2.设定图框 — border <img src="图形文件名" border=点数>
3.设定图形大小 — width?height <img src="图形文件名" width=宽度点数
height=高度点数>
4.设定图形上下左右留空 — vspace?hspace <img src="图形文件名" vspace=上下留空点数
hspace=左右留空点数>
5.图形附注 <img src="图形文件名" alt="说明文字">
6.预载图片
<img src="高解析度图形文件名" lowsrc="低解析度图形文件名"> P.S.两个图的图形大小最好一致
7.影像地图(Image Map) <img src="图形文件名" usemap="#图的名称"> <map
name="图的名称">
<area shape=形状 coords=区域座标列表 href="连结点之URL">
<area shape=形状 coords=区域座标列表 href="连结点之URL">
<area shape=形状 coords=区域座标列表 href="连结点之URL">
<area shape=形状 coords=区域座标列表 href="连结点之URL"> </map>

【1】定义形状 — shape
shape=rect:矩形 shape=circle:圆形
shape=poly:多边形
【2】定义区域 — coords
a.矩形:必须使用四个数字,前两个数字为左上角座标,后两个数字为右下角座标
例:<area shape=rect coords=100,50,200,75 href="URL">
b.圆形:必须使用三个数字,前两个数字为圆心的座标,最后一个数字为半径长度
例:<area shape=circle coords=85,155,30 href="URL">
c.任意图形(多边形):将图形之每一转折点座标依序填入
例:<area shape=poly coords=232,70,285,70,300,90,250,90,200,78 href="URL">
表格
1.定义表格 <table>……….</table>
【1】设定边框的厚度 — border
<table border=点数>
【2】设定格线的宽度 — cellspacing
<table cellspacing=点数>
【3】设定资料与格线的距离 — cellpadding
<table cellpadding=点数>
【4】调整表格宽度 — width
<table width=点数或百分比>
【5】调整表格高度 — height
<table height=点数或百分比>
【6】设定表格背景色彩 — bgcolor
<table bgcolor=#rrggbb>
【7】设定表格边框色彩 — bordercolor
<table bordercolor=#rrggbb>

2.显示格线 <table border>
3.表格标题
<caption>……….</caption>
表格标题位置 — align
<caption align="#"> #号可为 top:表标题置于表格上方(预设值)
bottom:表标题置于表格下方
4.定义列 <tr>
5.定义栏位
《1》<td>:靠左对齐
《2》<th>:靠中对齐?粗体
【1】水平位置 — align <th align="#">
#号可为 left:向左对齐
center:向中对齐 right:向右对齐
【2】垂直位置 — align <th align="#"> #号可为
top:向上对齐 middle:向中对齐
bottom:向下对齐
【3】栏位宽度 — width
<th width=点数或百分比>
【4】栏位垂直合并 — rowspan
<th rowspan=欲合并栏位数>
【5】栏位横向合并 — colspan
<th colspan=欲合并栏位数>

清单
一、目录式清单
<dir> <li>项目1 <li>项目2 <li>项目3 </dir>
P.S.目录式清单每一个项目不能超过20个字元(即10个中文字)

二、选项式清单 <menu> <li>项目1 <li>项目2 <li>项目3 </menu>

三、有序号的清单 <ol> <li>项目1 <li>项目2 <li>项目3 </ol>
【1】序号形式 — type <ol type=#>或<li type=#> #号可为
A:表以大写英文字母A?B?C?D…做为项目编号 a:表以小写英文字母a?b?c?d…做为项目编号
I:表以大写罗马数字做为项目编号 i:表以小写罗马数字做为项目编号 1:表以阿拉伯数字做为项目编号(预设值)
【2】起始数字 — start <ol start=欲开始计数的序数>
【3】指定编号 — value <li value=欲指定的序数>

四、无序号的清单 <ul> <li>项目1 <li>项目2 <li>项目3 </ul>
【1】项目符号形式 — type <ul type=#>或<li type=#> #号可为 disc:实心圆点(预设值)
circle:空心圆点 square:实心方块
【2】原始清单 — plain <ul plain>
【3】清单排列方式 — warp 《1》清单垂直排列 <ul warp = vert> 《2》清单水平排列 <ul
warp = horiz>

五、定义式清单 <dl> <dt>项目1 <dd>项目1说明 <dt>项目2 <dd>项目2说明 <dt>项目3
<dd>项目3说明 </dl>
紧密排列 — compact <dl compact> P.S.如此可使<dt>的内容与<dd>的内容在同一行,仅
以数格空白相隔而不换行,但若<dt>的文字超过一 定的长度后,compact的作用就消失了!

表单
一、基本架构 <form action="处理资料用的CGI程式之URL"或"mailto:电子信箱的URL"
method="get或post"> ………. ………. ………. </form>

二、输入文件型表单 <form action="URL" method="post"> <input> <input>
………. ………. </form>

【1】栏位类型 — type <input type=#> #号可为 text:文字输入 password:密码
checkbox:多选钮 radio:单选钮 submit:接受按钮 reset:重设按钮 image:图形钮
hidden:隐藏栏位
【2】栏位名称 — name <input name="资料栏名">
P.S.若type为submit?reset则name不必设定
【3】文件上的预设值 — value <input value="预设之字串">
【4】设定栏位的宽度 — size <input size=字元数>
【5】限制最大输入字串的长度 — maxlength <input maxlength=字元数>
【6】预设checkbox或radio的初值 — checked <input type=checkbox
checked> <input type=radio checked>
【7】指定图形的URL — src <input type=image src="图档名">
【8】图文对齐 — align <input type=image align="#"> #号可为
top:文字对齐图片之顶端 middle:文字对齐图片之中间 buttom:文字对齐图片之底部
三、选择式表单 <form action="URL" method="post"> <select> <option>
<option> ………. ………. </select> </form>
A、<select>的属性
【1】栏位名称 — name <select name="资料栏位名">
【2】设定显示的选项数 — size <select size=个数>
【3】多重选项 — multiple <select multiple>
B、<option>的属性
【1】定义选项的传回值 — value <option value="传回值">
【2】预先选取的选项 — selected <option selected>
四、多列输入文字区表单 <form action="URL" method="post"> <textarea>
………. ………. </textarea> </form>
【1】文字区的变数名称 — name <textarea name=变数名称>
【2】设定文字输入区宽度 — cols <textarea cols=字元数>
【3】设定文字输入区高度 — rows <textarea rows=列数>
【4】输入区设定预设字串 <textarea> 预设文字 </textarea>
【5】自动换行与否 — wrap <textarea wrap=#> #号可为
off:表输入的文字超过栏宽时,不会自动换行(预设值) virtual:表输入的文字在超过栏宽时会自动换行
链接
一、连结至其他文件 <a href="URL">说明文字或图片</a>
二、连结至文件内之某一处(外部连结)
《1》起点
<a href="档名#名称">……….</a>
《2》终点 <a name="名称">
三、frame的超连结
【1】开启新的浏览器来显示连结文件 — _blank <a href="URL" target=_blank>
【2】显示连结文件於目前的frame — _self <a href="URL" target=_self>
【3】以上一层的分割视窗显示连结文件 — _parent <a href="URL" target=_parent>
【4】以全视窗显示连结文件 — _top <a href="URL" target=_top>
【5】以特定视窗显示连结文件 –<a href="URL" target="特定视窗名称">
FRAME
一、分割视窗指令 <frameset>……….</frameset>
【1】垂直(上下)分割 — rows
<frameset rows=#> #号可为点数:如欲分割为100,200,300三个视窗,则
<frameset rows=100,200,300>;亦可以*号代表,如<frameset rows=*,500,*>
百分比:如<frameset rows=30%,70%>,各 项总和最好为100%
【2】水平(左右)分割 — cols <frameset cols=点数或百分比>
二?指定视窗内容 — <frame>
<frameset cols=30%,70%> <frame> <frame> </frameset>
【1】指定视窗的文件名称 — src <frame src=HTML档名>
【2】定义视窗的名称 — name
<frame name=视窗名称>
【3】设定文件与上下边框的距离 — marginheight
<frame marginheight=点数>
【4】设定文件与左右边框的距离 — marginwidth
<frame marginwidth=点数>
【5】设定分割视窗卷轴 — scrolling
<frame scrolling=#> #号可为 yes:固定出现卷轴
no:不出现卷轴 auto:自动判断文件大小需不需要卷轴(预设值)
【6】锁住分割视窗的大小 — noresize <frame noresize>

2007年06月04日

ServerVariables 集合检索预定的环境变量。

语法
Request.ServerVariables [server environment variable]

参数
服务器环境变量
指定要检索的服务器环境变量名。可以使用下面列出的值。变量 说明
ALL_HTTP 客户端发送的所有 HTTP 标题文件。
ALL_RAW 检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称总是大写的。使用 ALL_RAW 时,标题名称和值只在客户端发送时才出现。
APPL_MD_PATH 检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。
APPL_PHYSICAL_PATH 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路径以返回值。
AUTH_PASSWORD 该值输入到客户端的鉴定对话中。只有使用基本鉴定时,该变量才可用。
AUTH_TYPE 这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。
AUTH_USER 未被鉴定的用户名。
CERT_COOKIE 客户端验证的唯一 ID,以字符串方式返回。可作为整个客户端验证的签字。
CERT_FLAGS 如有客户端验证,则 bit0 为 1。
如果客户端验证的验证人无效(不在服务器承认的 CA 列表中),bit1 被设置为 1。

CERT_ISSUER 用户验证中的颁布者字段(O=MS,OU=IAS,CN=user name,C=USA)。
CERT_KEYSIZE 安全套接字层连接关键字的位数,如 128。
CERT_SECRETKEYSIZE 服务器验证私人关键字的位数。如 1024。
CERT_SERIALNUMBER 用户验证的序列号字段。
CERT_SERVER_ISSUER 服务器验证的颁发者字段。
CERT_SERVER_SUBJECT 服务器验证的主字段。
CERT_SUBJECT 客户端验证的主字段。
CONTENT_LENGTH 客户端发出内容的长度。
CONTENT_TYPE 内容的数据类型。同附加信息的查询一起使用,如 HTTP 查询 GET、 POST 和 PUT。
GATEWAY_INTERFACE 服务器使用的 CGI 规格的修订。格式为 CGI/revision。
HTTP_<HeaderName> HeaderName 存储在标题文件中的值。未列入该表的标题文件必须以 HTTP_ 作为前缀,以使 ServerVariables 集合检索其值。
注意 服务器将 HeaderName 中的下划线(_)解释为实际标题中的破折号。例如,如果您指定 HTTP_MY_HEADER,服务器将搜索以 MY-HEADER 为名发送的标题文件。

HTTPS 如果请求穿过安全通道(SSL),则返回 ON。如果请求来自非安全通道,则返回 OFF。

HTTPS_KEYSIZE 安全套接字层连接关键字的位数,如 128。

HTTPS_SECRETKEYSIZE 服务器验证私人关键字的位数。如 1024。

HTTPS_SERVER_ISSUER 服务器验证的颁发者字段。

HTTPS_SERVER_SUBJECT 服务器验证的主字段。

INSTANCE_ID 文本格式 IIS 实例的 ID。如果实例 ID 为 1,则以字符形式出现。使用该变量可以检索请求所属的(元数据库中)Web 服务器实例的 ID。

INSTANCE_META_PATH 响应请求的 IIS 实例的元数据库路径。

LOCAL_ADDR 返回接受请求的服务器地址。如果在绑定多个 IP 地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要。

LOGON_USER 用户登录 Windows NT? 的帐号。

PATH_INFO 客户端提供的额外路径信息。可以使用这些虚拟路径和 PATH_INFO 服务器变量访问脚本。如果该信息来自 URL,在到达 CGI 脚本前就已经由服务器解码了。

PATH_TRANSLATED PATH_INFO 转换后的版本,该变量获取路径并进行必要的由虚拟至物理的映射。

QUERY_STRING 查询 HTTP 请求中问号(?)后的信息。

REMOTE_ADDR 发出请求的远程主机的 IP 地址

REMOTE_HOST 发出请求的主机名称。如果服务器无此信息,它将设置为空的 MOTE_ADDR 变量。

REMOTE_USER 用户发送的未映射的用户名字符串。该名称是用户实际发送的名称,与服务器上验证过滤器修改过后的名称相对。

REQUEST_METHOD 该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST 等等。

SCRIPT_NAME 执行脚本的虚拟路径。用于自引用的 URL。

SERVER_NAME 出现在自引用 UAL 中的服务器主机名、DNS 化名或 IP 地址。

SERVER_PORT 发送请求的端口号。

SERVER_PORT_SECURE 包含 0 或 1 的字符串。如果安全端口处理了请求,则为 1,否则为 0。

SERVER_PROTOCOL 请求信息协议的名称和修订。格式为 protocol/revision 。

SERVER_SOFTWARE 应答请求并运行网关的服务器软件的名称和版本。格式为 name/version 。

URL 提供 URL 的基本部分。

2007年06月01日
  &#09;     Horizontal Tab
  &#10;     Line feed
  &#32;   20 space
  &#33; ! 21 Exclamation point
&quot; &#34; " 22 Double quote
  &#35; # 23 Number sign
  &#36; $ 24 Dollar sign
  &#37; % 25 Percent sign
&amp; &#38; & 26 Ampersand (and sign)
  &#39; 27 Single quote
  &#40; ( 28 Left parenthesis
  &#41; ) 29 Right parenthesis
  &#42; * 2A Asterisk (star)
  &#43; + 2B Plus
  &#44; , 2C Comma
  &#45; - 2D Minus (hyphen)
  &#46; . 2E Period
  &#47; / 2F Forward slash
  &#48; 0 30 Zero
  &#49; 1 31 One
  &#50; 2 32 Two
  &#51; 3 33 Three
  &#52; 4 34 Four
  &#53; 5 35 Five
  &#54; 6 36 Six
  &#55; 7 37 Seven
  &#56; 8 38 Eight
  &#57; 9 39 Nine
  &#58; : 3A Colon
  &#59; ; 3B Semi-colon
&lt; &#60; < 3C Less-than sign
  &#61; = 3D Equal sign
&gt; &#62; > 3E Greater-than sign
  &#63; ? 3F Question mark
  &#64; @ 40 At-sign
  &#65; A 41 Capital a
  &#66; B 42 Capital b
  &#67; C 43 Capital c
  &#68; D 44 Capital d
  &#69; E 45 Capital e
  &#70; F 46 Capital f
  &#71; G 47 Capital g
  &#72; H 48 Capital h
  &#73; I 49 Capital i
  &#74; J 4A Capital j
  &#75; K 4B Capital k
  &#76; L 4C Capital l
  &#77; M 4D Capital m
  &#78; N 4E Capital n
  &#79; O 4F Capital o
  &#80; P 50 Capital p
  &#81; Q 51 Capital q
  &#82; R 52 Capital r
  &#83; S 53 Capital s
  &#84; T 54 Capital t
  &#85; U 55 Capital u
  &#86; V 56 Capital v
  &#87; W 57 Capital w
  &#88; X 58 Capital x
  &#89; Y 59 Capital y
  &#90; Z 5A Capital z
  &#91; [ 5B Left square bracket
  &#92; \ 5C Back slash
  &#93; ] 5D Right square bracket
  &#94; ^ 5E Caret
  &#95; _ 5F Underscore
  &#96; ` 60 Grave accent
  &#97; a 61 Lowercase a
  &#98; b 62 Lowercase b
  &#99; c 63 Lowercase c
  &#100; d 64 Lowercase d
  &#101; e 65 Lowercase e
  &#102; f 66 Lowercase f
  &#103; g 67 Lowercase g
  &#104; h 68 Lowercase h
  &#105; i 69 Lowercase i
  &#106; j 6A Lowercase j
  &#107; k 6B Lowercase k
  &#108; l 6C Lowercase l
  &#109; m 6D Lowercase m
  &#110; n 6E Lowercase n
  &#111; o 6F Lowercase o
  &#112; p 70 Lowercase p
  &#113; q 71 Lowercase q
  &#114; r 72 Lowercase r
  &#115; s 73 Lowercase s
  &#116; t 74 Lowercase t
  &#117; u 75 Lowercase u
  &#118; v 76 Lowercase v
  &#119; w 77 Lowercase w
  &#120; x 78 Lowercase x
  &#121; y 79 Lowercase y
  &#122; z 7A Lowercase z
  &#123; { 7B Left curly brace
  &#124; | 7C Vertical bar
  &#125; } 7D Right curly brace
&tilde; &#126; ~ 7E tilde
  &#127;  7F Not defined
  &#128; 20AC Euro
  &#129; ?   Unknown
&sbquo; &#130; ? 201A Single low-quote
  &#131; ? 192 Function symbol (lowercase f with hook)
&dbquo; &#132; ? 201E Double low-quote
  &#133; 2026 Elipsis
&dagger; &#134; ? 2020 Dagger
&Dagger; &#135; ? 2021 Double dagger
  &#136; ?   Hatchek
&permil; &#137; 2030 Per million symbol
  &#138; ? 160 Capital esh
&lsaquo; &#139; ?   Left single angle quote
  &#140; ? 152 OE ligature
  &#141; ?   Unknown
  &#142; ?   Capital ?
  &#143; ?   Unknown
  &#144; ?   Unknown
&lsquo; &#145; 2018 Left single-quote
&rsquo; &#146; 2019 Right single-quote
&ldquo; &#147; 201C Left double-quote
&rdquo; &#148; 201D Right double-quote
  &#149; ? 2022 Small bullet
&ndash; &#150; 2013 En dash
&mdash; &#151; 2014 Em dash
&tilde &#152; ?   Tilde
&trade; &#153; ? 2122 Trademark
  &#154; ? 161 Lowercase esh
&rsaquo; &#155; ?   Right single angle quote
  &#156; ? 153 oe ligature
  &#157; ?   Unknown
  &#158; ?   Lowercase ?
&Yuml; &#159; ? 178 Uppercase y-umlaut
&nbsp; &#160;   A0 Non-breaking space
&iexcl; &#161; ? A1 Inverted exclamation point
&cent; &#162; A2 Cent
&pound; &#163; A3 Pound currency sign
&curren; &#164; ¤ A4 Currency sign
&yen; &#165; A5 Yen currency sign
&brvbar; &#166; | A6 Broken vertical bar
&sect; &#167; § A7 Section symbol
&uml; &#168; ¨ A8 Umlaut (Diaeresis)
&copy; &#169; ? A9 Copyright
&ordf; &#170; a AA Feminine ordinal indicator (superscript lowercase a)
&laquo; &#171; ? AB Left angle quote
&not; &#172; ? AC Not sign
&shy; &#173; ­  AD Soft hyphen
&reg; &#174; ? AE Registered sign
&macr; &#175; ˉ AF Macron
&deg; &#176; ° B0 Degree sign
&plusmn; &#177; ± B1 Plus/minus sign
&sup2; &#178; 2 B2 Superscript 2
&sup3; &#179; 3 B3 Superscript 3
  &#180; B4 Acute accent
&micro; &#181; μ B5 Micro sign
&para; &#182; ? B6 Pilcrow sign (paragraph)
&middot; &#183; · B7 Middle dot
&cedil; &#184; ? B8 Cedilla
&sup1; &#185; 1 B9 Superscript 1
&ordm; &#186; o BA Masculine ordinal indicator (superscript o)
&raquo; &#187; ? BB Right angle quote
&frac14; &#188; ? BC One quarter fraction
&frac12; &#189; ? BD One half fraction
&frac34; &#190; ? BE Three quarters fraction
? &#191; ? BF Inverted question mark
&Agrave; &#192; à C0 A grave accent
&Aacute; &#193; á C1 A accute accent
&Acirc; &#194; ? C2 A circumflex
&Atilde; &#195; ? C3 A tilde
&Auml; &#196; ? C4 A umlaut
&Aring; &#197; ? C5 A ring
&AElig; &#198; ? C6 AE ligature
&Ccedil; &#199; ? C7 C cedilla
&Egrave; &#200; è C8 E grave
&Eacute; &#201; é C9 E acute
&Ecirc; &#202; ê CA E circumflex
&Euml; &#203; ? CB E umlaut
&Igrave; &#204; ì CC I grave
&Iacute; &#205; í CD I acute
&Icirc; &#206; ? CE I circumflex
&Iuml; &#207; ? CF I umlaut
&ETH; &#208; D D0 Eth
&Ntilde; &#209; ? D1 N tilde (enye)
&Ograve; &#210; ò D2 O grave
&Oacute; &#211; ó D3 O acute
&Ocirc; &#212; ? D4 O circumflex
&Otilde; &#213; ? D5 O tilde
&Ouml; &#214; ? D6 O umlaut
&times; &#215; × D7 Multiplication sign
&Oslash; &#216; ? D8 O slash
&Ugrave; &#217; ù D9 U grave
&Uacute; &#218; ú DA U acute
&Ucirc; &#219; ? DB U circumflex
&Uuml; &#220; ü DC U umlaut
&Yacute; &#221; Y DD Y acute
&THORN; &#222; T DE Thorn
&szlig; &#223; ? DF SZ ligature
&agrave; &#224; à E0 a grave
&aacute; &#225; á E1 a acute
&acirc; &#226; a E2 a circumflex
&atilde; &#227; ? E3 a tilde
&auml; &#228; ? E4 a umlaut
&aring; &#229; ? E5 a ring
&aelig; &#230; ? E6 ae ligature
&ccedil; &#231; ? E7 c cedilla
&egrave; &#232; è E8 e grave
&eacute; &#233; é E9 e acute
&ecirc; &#234; ê EA e circumflex
&euml; &#235; ? EB e umlaut
&igrave; &#236; ì EC i grave
&iacute; &#237; í ED i acute
&icirc; &#238; ? EE i circumflex
&iuml; &#239; ? EF i umlaut
&eth; &#240; e F0 eth
&ntilde; &#241; ? F1 n tilde
&ograve; &#242; ò F2 o grave
&oacute; &#243; ó F3 o acute
&ocirc; &#244; ? F4 o circumflex
&otilde; &#245; ? F5 o tilde
&ouml; &#246; ? F6 o umlaut
&divide; &#247; ÷ F7 Division symbol
&oslash; &#248; ? F8 o slash
&ugrave; &#249; ù F9 u grave
&uacute; &#250; ú FA u acute
&ucirc; &#251; ? FB u circumflex
&uuml; &#252; ü FC u umlaut
&yacute; &#253; y FD y acute
&thorn; &#254; t FE thorn
&yuml; &#255; ? FF y umlaut
友好编码 显示效果 编码描述
&spades; ? Spade card suit
&clubs; ? Clubs card suit
&diams; ? Diamonds card suit
&hearts; ? Hearts card suit
&oline; Overline
&larr; Left arrow
&rarr; Right arrow
&uarr; Up arrow
&darr; Down arrow
2007年05月25日

经常看到说正则的文章,但说的只是方法,却很少有说以下几个基本概念:

1.贪婪:+,*,?,{m,n}等默认是贪婪匹配,即尽可能多匹配,也叫最大匹配
如果后面加上?,就转化为非贪婪匹配,需要高版本支持

2.获取:默认用(x|y)是获取匹配,很多时候只是测试,不一定要求得到所匹配的数据,尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y),这样提高了效率,优化了程序。

3.消耗:默认是消耗匹配,一般在预查中是非消耗匹配。
举个例子,2003-2-8要变为2003-02-08
如果用/-(\d)-/第二次匹配将从8开始,从而只替换第一个2,错误
如果用/-(\d)(?=-)/则第二次匹配从第二个-开始,即不消耗字符-

4.预查:js中分为正向预查和负向预查
如上面的(?=pattern)是正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。还有(?!pattern)是负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。负向预查有时会用在对[^]的扩充,[^]只是一些字符,而?!可以使整个字符串。

5.回调:一般用在替换上,即根据不用的匹配内容返回不用的替换值,从而简化了程序,需要高版本支持

6.引用:\num 对所获取的第num个匹配的引用。
例如,’(.)\1\1′ 匹配AAA型。’(.)(.)\2\1′ 匹配ABBA型。


[Ctrl+A 全部选择 提示:你可先改部分代码,再按运行]


当然还有很多,这些都只是基本的需要掌握的

遇到正则问题,一般可用以下两种方法解决:

1.分类,即根据所有的可能列出各种情况,如2003以内的数
0 0
1-999 [1-9]\d{0,2}
1000-1999 1\d{3}
2000-2003 200[0-3]

所以最后的匹配就是 (0|[1-9]\d{0,2}|1\d{3}|200[0-3])

2.分组,即将整句分为不同的最小单元,如’、%、_成双出现
能成组的,即允许存在的,有

%% 如果是大于2的偶数个可细分为多个更小的2字符单元
__
[^'%_] 非以上字符

所以最后的匹配就是 ^(”|%%|__|[^'%_])*$


replace + function 5.5+支持

[Ctrl+A 全部选择 提示:你可先修改部分代码再按运行]

2007年05月24日

分为四个部分来讲解

一、正则表达式概述
二、正则表达式在VBScript中的应用
三、正则表达式在JavaScript中的应用
四、示例

首先:

  一、正则表达式概述

  如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。

  请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 ‘data?.dat’ 的模式可以找到下述文件:data1.dat、data2.dat等等。如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。’data*.dat’ 可以匹配下述所有文件名:data.dat、data1.dat、data12.dat等等,尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。

  在我们编写ASP程序时,经常会判断一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了。后面我们将介绍如何判断数字和Email地址的有效性。

  在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。

  使用正则表达式,能完成些什么事情呢?

  测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。

  替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。

  根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

  例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。

  那么,正则表达式语法的语法是如何呢?

  一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

  这里有一些可能会遇到的正则表达式示例:

  /^[ ]*$/ "^[ ]*$" 匹配一个空白行。

  /d{2}-d{5}/ "d{2}-d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。

  /<(.*)>.*</1>/ "<(.*)>.*</1>" 匹配一个 HTML 标记。

  二、正则表达式在VBScript中的应用

  VBScript使用RegExp对象、Matches集合以及Match对象提供正则表达式支持功能。我们还是先看一个例子。

  <%

  Function RegExpTest(patrn, strng)

  Dim regEx, Match, Matches   ’建立变量。

  Set regEx = New RegExp   ’建立正则表达式。

  regEx.Pattern = patrn  ’设置模式。

  regEx.IgnoreCase = True   ’设置是否区分字符大小写。

  regEx.Global = True   ’设置全局可用性。

  Set Matches = regEx.Execute(strng)  ’执行搜索。

  For Each Match in Matches  ’遍历匹配集合。

  RetStr = RetStr & "Match found at position "

  RetStr = RetStr & Match.FirstIndex & ". Match Value is ‘"

  RetStr = RetStr & Match.Value & "’." & "<BR>"

  Next

  RegExpTest = RetStr

  End Function

  response.write RegExpTest("[ij]s.", "IS1 Js2 IS3 is4")

  %>

  在这个例子中,我们查找字符串中有无is或者js这两个词,忽略大小写。运行的结果如下:

  Match found at position 0. Match Value is ‘IS1′.

  Match found at position 4. Match Value is ‘Js2′.

  Match found at position 8. Match Value is ‘IS3′.

  Match found at position 12. Match Value is ‘is4′.

  下面我们就介绍这三个对象和集合。

  1、RegExp对象是最重要的一个对象,它有几个属性,其中:

  ○Global 属性,设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。

  ○IgnoreCase 属性,设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 False。

  ○Pattern 属性,设置或返回被搜索的正则表达式模式。必选项。总是一个 RegExp 对象变量。

  2、Match 对象

  匹配搜索的结果是存放在Match对象中,提供了对正则表达式匹配的只读属性的访问。 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的 Match 对象属性都是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象提供了被正则表达式搜索找到的字符串的访问、字符串的长度,以及找到匹配的索引位置等。

  ○FirstIndex 属性,返回在搜索字符串中匹配的位置。FirstIndex 属性使用从零起算的偏移量,该偏移量是相对于搜索字符串的起始位置而言的。换言之,字符串中的第一个字符被标识为字符 0

  ○Length 属性,返回在字符串搜索中找到的匹配的长度。

  ○Value 属性,返回在一个搜索字符串中找到的匹配的值或文本。

  3、Matches 集合

  正则表达式 Match 对象的集合。Matches 集合中包含若干独立的 Match 对象,只能使用 RegExp 对象的 Execute 方法来创建之。与独立的 Match 对象属性相同,Matches `集合的一个属性是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位置的索引。

  学习了这三个对象和集合,如何应用于字符串的判断和替换呢?regExp对象的三个方法正好解决了这个问题,它们是Replace方法、Test方法和Execute方法。

  1、Replace 方法

  替换在正则表达式查找中找到的文本。我们还是先看个例子:下面的例子说明了 Replace 方法的用法。

  <%

  Function ReplaceTest(patrn, replStr)

  Dim regEx, str1 ‘ 建立变量。

  str1 = "The quick brown fox jumped over the lazy dog."

  Set regEx = New RegExp ‘ 建立正则表达式。

  regEx.Pattern = patrn ‘ 设置模式。

  regEx.IgnoreCase = True ‘ 设置是否区分大小写。

  ReplaceTest = regEx.Replace(str1, replStr) ‘ 作替换。

  End Function

  Response.write ReplaceTest("fox", "cat") & "<BR>" ‘ 将 ‘fox’ 替换为 ‘cat’。

  Response.write ReplaceTest("(S+)(s+)(S+)", "$3$2$1") ‘ 交换词对.

  %>

  2、Test 方法

  对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。

  如果找到了匹配的模式,Test方法返回True;否则返回False。下面的代码说明了Test 方法的用法。

  <%

  Function RegExpTest(patrn, strng)

  Dim regEx, retVal ‘ 建立变量。

  Set regEx = New RegExp ‘ 建立正则表达式。

  regEx.Pattern = patrn ‘ 设置模式。

  regEx.IgnoreCase = False ‘ 设置是否区分大小写。

  retVal = regEx.Test(strng) ‘ 执行搜索测试。

  If retVal Then

  RegExpTest = "找到一个或多个匹配。"

  Else

  RegExpTest = "未找到匹配。"

  End If

  End Function

  Response.write RegExpTest("is.", "IS1 is2 IS3 is4")

  %>

  3、Execute 方法

  对指定的字符串执行正则表达式搜索。正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。

  Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。

  三、JavaScript中正则表达式的使用

  在JavaScript 1.2版以后,JavaScript也支持正则表达式。

  1、replace

  replace在一个字符串中通过正则表达式查找替换相应的内容。replace并不改变原来的字符串,只是重新生成了一个新的字符串。如果需要执行全局查找或忽略大小写,那么在正则表达式的最后添加g和i。

  例:

  <SCRIPT>

  re = /apples/gi;

  str = "Apples are round, and apples are juicy.";

  newstr=str.replace(re, "oranges");

  document.write(newstr)

  </SCRIPT>

  结果是:"oranges are round, and oranges are juicy."

  例:

  <SCRIPT>

  str = "Twas the night before Xmas…";

  newstr=str.replace(/xmas/i, "Christmas");

  document.write(newstr)

  </SCRIPT>

  结果是:"Twas the night before Christmas…"

  例:

  <SCRIPT>

  re = /(w+)s(w+)/;str = "John Smith";

  newstr = str.replace(re, "$2, $1");

  document.write(newstr)

  </SCRIPT>

  结果是:"Smith, John".

  2、search

  search通过正则表达式查找相应的字符串,只是判断有无匹配的字符串。如果查找成功,search返回匹配串的位置,否则返回-1。

  

         search(regexp)

  <SCRIPT>

  function testinput(re, str){

  if (str.search(re) != -1)

  midstring = " contains ";

  else

  midstring = " does not contain ";

  document.write (str + midstring + re.source);

  }

  testinput(/^[1-9]/i,"123")

  </SCRIPT>

  3、match

  match方法执行全局查找,查找结果存放在一个数组里。

  例一:

  <SCRIPT>

  str = "For more information, see Chapter 3.4.5.1";

  re = /(chapter d+(.d)*)/i;

  found = str.match(re);

  document.write(found);

  </SCRIPT>

  显示结果:Chapter 3.4.5.1,Chapter 3.4.5.1,.1

  例二:

  <SCRIPT>

  str = "abcDdcba";

  newArray = str.match(/d/gi);

  document.write(newArray);

  </SCRIPT>

  显示结果D, d.

  四、示例

  1 、判断数字的正确性

  <%@ Language=VBScript %>

  <script language="javascript" runat="server">

  function isNumeric(strNumber) {

  return (strNumber.search(/^(-|+)?d+(.d+)?$/) != -1);

  }

  function isUnsignedNumeric(strNumber) {

  return (strNumber.search(/^d+(.d+)?$/) != -1);

  }

  function isInteger(strInteger) {

  return (strInteger.search(/^(-|+)?d+$/) != -1);

  }

  function isUnsignedInteger(strInteger) {

  return (strInteger.search(/^d+$/) != -1);

  }

  </script>

  <HTML>

  <BODY>

  <b>判断数字的正确性</b>

  <%

  Dim strTemp

  strTemp = CStr(Request.Form("inputstring"))

  If strTemp = "" Then strTemp = "0"

  %>

  <TABLE BORDER="1" CELLPADDING="4" CELLSPACING="2">

  <TR>

  <TD ALIGN="right"><B>原始字符串</B></TD>

  <TD><%= strTemp %></TD>

  </TR>

  <TR>

  <TD ALIGN="right"><B>数字</B></TD>

  <TD><%=isNumeric(strTemp)%></TD>

  </TR>

  <TR>

  <TD ALIGN="right"><B>非负数字</B></TD>

  <TD><%=isUnsignedNumeric(strTemp)%></TD>

  </TR>

  <TR>

  <TD ALIGN="right"><B>整数</B></TD>

  <TD><%=isInteger(strTemp)%></TD>

  </TR>

  <TR>

  <TD ALIGN="right"><B>非负整数()</B></TD>

  <TD><%=isUnsignedInteger(strTemp)%></TD>

  </TR>

  </TABLE>

  <FORM ACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>" METHOD="post">

  请输入一个数字:<BR>

  <INPUT TYPE="text" NAME="inputstring" SIZE="50"></INPUT><BR>

  <INPUT TYPE="submit" Value="提交"></INPUT><BR>

  </FORM>

  </BODY>

  </HTML>

  2、判断Email地址的正确性

  <%

  Function isemail(strng)

  isemail = false

  Dim regEx, Match

  Set regEx = New RegExp

  regEx.Pattern = "^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$"

  regEx.IgnoreCase = True

  Set Match = regEx.Execute(strng)

  if match.count then isemail= true

  End Function

  %>

2007年05月21日

JS的正则表达式

//校验是否全由数字组成

代码
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

代码
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验用户姓名:只能输入1-30个以字母开头的字串

代码
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
}}

//校验密码:只能输入6-20个字母、数字、下划线
[code]
function isPasswd(s)
{
var patrn=/^(\w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”

代码
function isTel(s)
{
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验手机号码:必须以数字开头,除数字外,可含有“-”

代码
function isMobil(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验邮政编码

代码
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}

//校验搜索关键字

代码
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\]
[\]\{\}:;'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

正则表达式

代码
"^\\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\\d+$"    //整数
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" 
//正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" 
//负浮点数
"^(-?\\d+)(\\.\\d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url
"^[A-Za-z0-9_]*$"

正则表达式使用详解

简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下:
测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

基本语法

在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

正则表达式的形式一般如下:  

/love/  其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
较为常用的元字符包括: “+”, “*”,以及 “?”。

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

下面,就让我们来看一下正则表达式元字符的具体应用。

/fo+/  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

/eg*/  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

/Wil?/  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,} n 是一个非负整数。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

代码
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。

(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
/\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
/\d000/ 如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。
除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。

代码
“^”定位符规定匹配模式必须出现在目标字符串的开头
“$”定位符规定匹配模式必须出现在目标对象的结尾
“\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一
“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,
即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说: /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:

代码
/[A-Z]/  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/  上述正则表达式将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。

这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/ 上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/  上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:

代码
1.\ 转义符
2.(), (?:), (?=), [] 圆括号和方括号
3.*, +, ?, {n}, {n,}, {n,m} 限定符
4.^, $, \anymetacharacter 位置和顺序
5.|“或”操作

使用实例
在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

代码
<html>
<head>
  <script language="Javascript1.2">
     <!-- start hiding
     function verifyAddress(obj)
     {
      var email = obj.email.value;
      var pattern =
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
      flag = pattern.test(email);
      if(flag)
      {
       alert(“Your email address is correct!”);
       return true;
      }
      else
       {
        alert(“Please try again!”);
        return false;
        }
      }
     // stop hiding -->
    </script>
  </head>
  <body>
   <form onSubmit="return verifyAddress(this);">
    <input name="email" type="text">
    <input type="submit">
    </form>
  </body>
</html>

正则表达式对象
本对象包含正则表达式模式以及表明如何应用模式的标志。

代码
语法 1 re = /pattern/[flags]
语法 2 re = new RegExp("pattern",["flags"])

参数
re
必选项。将要赋值为正则表达式模式的变量名。

Pattern
必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。

Flags
可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用,可用的有:

代码
g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找)

示例
下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于 match 方法中:

代码
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = new RegExp("ain","g"); // 创建正则表达式对象。
r = s.match(re); // 在字符串 s 中查找匹配。
return(r);
}

返回值: ain,ain,ain,ain\\
属性 lastIndex 属性 | source 属性\\
方法 compile 方法 | exec 方法 | test 方法\\
要求 版本 3\\
请参阅 RegExp 对象 | 正则表达式语法 | String 对象\\

exec 方法
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
rgExp.exec(str)

参数

rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。

str
必选项。要在其中执行查找的 String 对象或字符串文字。

说明\\
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

示例\\
下面的例子举例说明了 exec 方法的用法:

代码
function RegExpTest()
{
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){ // 测试 JScript 的版本。
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; // 创建正则表达式模式。
var arr;
while ((arr = re.exec(src)) != null)
document.write(arr.index + "-" + arr.lastIndex + arr + "\t");
}
else{
alert("请使用 JScript 的更新版本");
}
}

返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain

test 方法\\
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。
rgexp.test(str)

参数\\
rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。

str
必选项。要在其上测试查找的字符串。

说明
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。

示例
下面的例子举例说明了 test 方法的用法:

代码
function TestDemo(re, s)
{
var s1; // 声明变量。
// 检查字符串是否存在正则表达式。
if (re.test(s)) // 测试是否存在。
s1 = " contains "; // s 包含模式。
else
s1 = " does not contain "; // s 不包含模式。
return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。
}

函数调用:document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));

返回值:'The rain in Spain falls mainly in the plain.' contains 'ain+'

match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。\\
stringObj.match(rgExp)

参数\\
stringObj
必选项。对其进行查找的 String 对象或字符串文字。

rgExp
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。

说明\\
如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。
match 方法返回的数组有三个属性:input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。
如果没有设置全局标志 (g),数组的 0 元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。

示例\\
下面的示例演示了match 方法的用法:

代码
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /ain/i; // 创建正则表达式模式。
r = s.match(re); // 尝试匹配搜索字符串。
return(r); // 返回第一次出现 "ain" 的地方。
}

返回值:ain

本示例说明带 g 标志设置的 match 方法的用法。

代码
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /ain/ig; // 创建正则表达式模式。
r = s.match(re); // 尝试去匹配搜索字符串。
return(r); // 返回的数组包含了所有 "ain"
// 出现的四个匹配。
}

返回值:ain,ain,ain,ain

上面几行代码演示了字符串文字的 match 方法的用法。

代码
var r, re = "Spain";
r = "The rain in Spain".replace(re, "Canada");
return r;

返回值:The rain in Canada

search 方法
返回与正则表达式查找内容匹配的第一个子字符串的位置。

stringObj.search(rgExp)

参数\\
stringObj
必选项。要在其上进行查找的 String 对象或字符串文字。

rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。

说明

search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。

示例\\
下面的示例演示了 search 方法的用法。

代码
function SearchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain.";
re = /falls/i; // 创建正则表达式模式。
r = s.search(re); // 查找字符串。
return(r); // 返回 Boolean 结果。
}

返回值:18

正则表达式语法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例:

代码
JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。

+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。

(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.

\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

优先权顺序
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。

下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:

代码
操作符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序
| “或”操作

普通字符

普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。

最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例:

代码
/a/
/7/
/M/

等价的 VBScript 单字符正则表达式为:

代码
"a"
"7"
"M"

可以将多个单字符组合在一起得到一个较大的表达式。例如,下面的 JScript 正则表达式不是别的,就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。

/a7M/
等价的 VBScript 表达式为:

"a7M"
请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。

2007年03月14日

方法1:原理:表格和单元格都用背景,但互相颜色不同,单元格背景遮住了和表格重合的部分,就出现了边框。但要注意,表格的属性一定要设置为边距为1(cellspacing="1")。不然效果不好。效果如下

1 2 3 4
1 2 3 4

方法二:语法: border-collapse : separate | collapse 取值: separate :  默认值。边框独立(标准HTML) collapse :  相邻边被合并
<style type="text/css">
.td{border:1px #0066ff solid;}
.table{border-collapse:collapse;}
</style>
<table width="300" class="table">
        <tr>
            <td class="td">1</td>
            <td class="td">2</td>
        </tr>
        <tr>
            <td class="td">3</td>
            <td class="td">4</td>
        </tr>
</table>

1 2
3 4

比较一下

1 2
3 4