更新时间:2023-12-24 10:22
RegExp(RegExp VBScript)是一个VBScript5.0的正则表达式对象,正则表达式是SetregEx=NewRegExp。
某人一天写程序的时候出现了一个问题,总是出现不允许操作的对象的错误,很奇怪之前一直运行没有问题的程序,怎么会有不允许操作的对象呢?只能一步一步的查到底是那个对象不允许操作了,终于找到了这个对象,Set regEx = New RegExp,把所有的文件搜索了一遍,也没有发现 RegExp,怪不得会出现不允许操作的对象了。
上网搜索RegExp,原来这是一个VBScript5.0的正则表达式对象。只要你的服务器安装了IE5.x,就会VBScript5.0。VB中的replace和execute函数可以执行,那么这个为什么不能执行呢?猜想可能是改对象需要注册组件,开始-运行:regsvr32 vbscript.dll 就OK了。
问题解决了,那么RegExp该如何使用呢?在网上找到了相关的说明。
我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因 为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题。因此我们在将这 些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。所以我们一般会在后端编写一个ASP 的校验程序来分析用户输入的数据是否是合法的。
或许有人会问了,使用运行在客户端的JavaScript不是可以更好更快的 来校验用户的数据吗?的确,这样在大多的情况下是可以的,为什么是大多情况下呢?因为你编写的JavaScript不一定可以完全正常的同时运行在IE以 及Netscape上面,因为微软的Jscript并不全和JavaScript相同,再加上还有一些浏览器不一定和微软以及Netscape兼容的很 好,所以很有可能在客户端的Javascript不会精确的校验用户输入的各种数据,而ASP程序是运行在服务器端的,只是和你的服务器的环境有关,无论 客户端是什么浏览器,对于你的ASP程序来说都是没有分别的,所以选择使用后端的ASP程序来进行数据合法性的校验是一个好的选择。
在使用ASP来进行后端的数据合法性校验的时候,有些人为满足不同环境下面的数据校验,编写了很多的函数来实现,比如,我们想要校验用户输入的URL 地址是否合法,是可以自己编写一段代码来逐个逐个字符的分析用户输入的信息,要分析的信息量小了,那还比较好办,若是分析的条件千变万化,那可就惨了,不 但要编写很长很繁琐的代码,而且运行的效率极其低下,有没有好的解决办法呢?有,那就是VBScritp5.0提供的“正则表达式”对象,只要你的服务器 安装了IE5.x,就会带VBScript5.0。其实,“正则表达式”原本是Unix下面的专利,尤其是在Perl语言中使用的最为广泛,正是由于“正 则表达式”的强大功能,才使得微软慢慢将正则表达式对象移植到了视窗系统上面,利用
“正则表达式”对象,我们就可以非常方便的对各种数据进行合法性的校验了。
首先,让我们来了解一下究竟什么是VBScript的“正则表达式”对象,我们先来看一段程序:
在这段程序中,我们看到可以使用“New RegExp”来得到一个正则表达式对象,然后对这个对象进行正则匹配模板的赋值,也就是告诉正则表达式对象,你想要匹配一个什么样子的模板,然后使用方法Test来检测待处理的数据究竟和我们给出的模版是否相匹配,如果不匹配,那就表明待处理的数据不是合法的数据,从而也就实现了数据合法性的校验,我们 可以看出,使用一个设计合理的匹配模板,我们可以轻松的校验一批格式类似的数据信息。
当然,VBScript5.0中的“正则表达式”对象还有很多的其他的方法和属性,比如方法Replace(),利用他我们就可以很快的实现网上很时髦的UBB风格的论坛以及BBS,这不 在我们讨论范围之内,以后再加以论述,我们就看看在数据校验方面正则表达式对象常用的方法和属性:
常用方法:Execute 方法
描述:对指定的字符串执行正则表达式搜索。
语法:object.Execute(string) Execute 方法的语法包括以下几个部分:
object:必需的。总是一个 RegExp 对象的名称。
string:必需的。要在其上执行正则表达式的文本字符串。
说明:正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。Execute 方法返回一个
Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。
Test方法
描述:对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。
语法:object.Test(string)
Test 方法的语法包括以下几个部分:
object:必需的。总是一个 RegExp 对象的名称。
string:必需的。要执行正则表达式搜索的文本字符串。
说明:正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式,Test方法返回True;否则返回False。
常用属性:Global属性
描述:设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
语法:object.Global [= True | False ]
object 参数总是 RegExp 对象。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。
IgnoreCase属性
描述:设置或返回一个Boolean值,指明模式搜索是否区分大小写。
语法:object.IgnoreCase [= True | False ]
object 参数总是一个 RegExp 对象。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 False。
Pattern属性
描述:设置或返回被搜索的正则表达式模式。这是一个最重要的属性,我们主要是设置这个属性来实现数据校验的。
Pattern 属性的语法包含以下几个部分:
object:必需的。总是一个 RegExp 对象变量。
searchstring:可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。
设置:在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字符和序列,并给出了实例。
字符描述:\uff1a将下一个字符
^ :匹配输入的开始位置。
$ :匹配输入的结尾。
.:匹配换行符以外的任何字符。
[xyz] :一个字符集
:与分页符匹配。
:与换行符字符匹配。
:与回车字符匹配。
:与制表符匹配。
字符。
:匹配 n,其中n 是一个八进制换码值。八进制换码值必须是 1,2 或 3 个数字长。
好了,常用的方法和属性就是这些了,上面的语法介绍的已经很详细了,我们就没有必要在啰嗦了,接下来我们来看看在具体的例子里面如何使用这些方法和属性来 校验数据的合法性,我们还是举个例子吧,比如,我们想要对用户输入的电子邮件进行校验,首先,一个合法的电子邮件地址至少应当满足以下几个条件:
⒈ 必须包含一个并且只有一个符号“@”
⒉ 必须包含至少一个至多三个符号“.”
⒊ 第一个字符不得是“@”或者“.”
⒋ 不允许出现“@.”或者.@
⒌ 结尾不得是字符“@”或者“.”
这样,我们只要定制不同的模板,就可以实现对不同数据的合法性校验了。所以,正则表达式对象中最重要的属性就是:“Pattern”属性,只要真正掌握了这个属性,才可以自由的运用正则表达式对象来为我们的数据校验进行服务。-------------------------------------------RegExp对象提供简单的正则表达式支持功能。
RegExp对象的用法:
RegExp 对象的属性
◎ Global属性
Global属性设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
语法
object.Global [= True | False ]
object 参数总是 RegExp 对象。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 True。
Global 属性的用法(改变赋予 Global 属性的值并观察其效果):
◎ IgnoreCase属性
IgnoreCase属性设置或返回一个Boolean值,指明模式搜索是否区分大小写。
语法
object.IgnoreCase [= True | False ]
object 参数总是一个 RegExp 对象。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 True。
IgnoreCase 属性的用法(改变赋予 IgnoreCase 属性的值以观察其效果):
◎ Pattern属性
Pattern属性设置或返回被搜索的正则表达式模式。
语法
Pattern 属性的语法包含以下几个部分:
语法说明:
object 必需的。总是一个 RegExp 对象变量。
searchstring 可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。
设置
在书写正则表达式的模式时使用了特殊的字符和序列。下面描述了可以使用的字符和序列,并给出了实例。
^ 匹配输入的开始位置。
$ 匹配输入的结尾。
. 匹配换行符以外的任何字符。
[xyz] 一个字符集
与分页符匹配。
与换行符字符匹配。
与回车字符匹配。
与制表符匹配。
Pattern 属性的用法:
RegExp对象的方法
◎ Execute方法
Execute方法对指定的字符串执行正则表达式搜索。
语法
object.Execute(string)
语法部分描述
object 必需的。总是一个 RegExp 对象的名称。
string 必需的。要在其上执行正则表达式的文本字符串。
说明
正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。
Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。
Execute 方法的用法:
◎ Replace方法
Replace方法替换在正则表达式查找中找到的文本。
语法
object.Replace(string1,string2)
语法部分描述
object 必需的。总是一个 RegExp 对象的名称。
string1 必需的。string1 是将要进行文本替换的字符串。
string2 必需的。string2 是替换文本字符串。
说明
被替换的文本的实际模式是通过 RegExp 对象的 Pattern 属性设置的。
Replace 方法返回 string1 的副本,其中的 RegExp.Pattern 文本已经被替换为 string2。如果没有找到匹配的文本,将返回原来的 string1 的副本。
Replace 方法的用法:
' 将 'fox' 替换为 'cat'。
;另外,Replace 方法在模式中替换 subexpressions。下面对以前示例中函数的调用,替换了原字符串中的所有字对:
◎ Test方法
Test方法对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。
语法
object.Test(string)
语法部分描述
object 必需的。总是一个 RegExp 对象的名称。
string 必需的。要执行正则表达式搜索的文本字符串。
说明
正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。
如果找到了匹配的模式,Test方法返回True;否则返回False。
Test 方法的用法:
RegExp 对象
new RegExp(“表达式”,”属性”)
FF: Firefox,N: Netscape,IE: Internet Explorer;数字表示此版本以后支持
属性 描述 FF N IE
global
RegExp 对象是否具有标志 g。1 4 4
ignoreCase
RegExp 对象是否具有标志 i。1 4 4
lastIndex
一个整数,标示开始下一次匹配的字符位置。1 4 4
multiline
RegExp 对象是否具有标志 m。1 4 4
source
正则表达式的源文本。1 4 4
方法 描述 FF N IE
exec
检索字符串中指定的值。返回找到的值(存放于数组中)。1 4 4
test
检索字符串中指定的值。返回 true 或 false。1 4 4
说明:
⒈exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。
⒉使用过的正则对象会从上次匹配位置开始新匹配。
⒊如果构造函数中属性包含i,会把所有匹配项强制转换为小写。
⒋正则对象中不包含g的话只处理一次匹配。
简单示例:
实例化一个RegExp:
支持正则表达式的 String 对象的方法
方法 描述 FF N IE
search
检索与正则表达式相匹配的值,返回位置。1 4 4
match
找到一个或多个(含属性g)正在表达式的匹配,返回字符串或数组 1 4 4
replace
替换与正则表达式匹配的子串,返回替换后的字符串。1 4 4
split
把字符串分割为字符串数组,返回数组。1 4 4
说明:
⒈ replace函数的第二个参数可以是一个函数,此时会调用此函数处理每一次匹配。
⒉ replace函数的正则参数如果不包含g属性,将只替换第一个匹配。
简单示例:
将 str中的url添加上html a标签。(注意:此demo代码并不实用)
RegExp 是正则表达式的缩写。
当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。
简单的模式可以是一个单独的字符。
更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。
您可以规定字符串中的检索位置,以及要检索的字符类型,等等。
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具
RegExp 对象用于存储检索模式。
创建RegExp对象语法:
RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
test()
test() 方法检索字符串中的指定值。返回值是 true 或 false。
例子:
true
true
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
例子 1:
e e
例子 2:
如需关于如何修改搜索模式的完整信息,请访问我们的 RegExp 对象参考手册。
eeeeeenull
eeeeeenull
compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
truefalse
new RegExp(pattern,attributes);
参数:
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributespattern 是正则表达式,而不是字符串,则必须省略该参数。
返回值:
一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
抛出:
SyntaxError - 如果 pattern 不是合法的正则表达式,或 attributes
TypeError - 如果 pattern 是 RegExp 对象,但没有省略 attributes 参数,抛出该异常。
修饰符:
方括号:
方括号用于查找某个范围内的字符:
支持正则表达式的String对象的方法:
FF: Firefox,IE: Internet Explorer