asp教程

ASP正则表达式的应用

位置:首页 > asp教程 > asp技巧,2015-08-04
首先我们先来说说在什么时候,需要在ASP程序里用到正则表达式:1.在ASP里如果需要处理一些比较复杂的数据,就要用到正则表达式了:如有一段文章,里面的格式为第一

首先我们先来说说在什么时候,需要在ASP程序里用到正则表达式:

1.在ASP里如果需要处理一些比较复杂的数据,就要用到正则表达式了:如有一段文章,里面的格式为第一节。。第二节。。第三节,而我们要求在保存到数据库的时候按每一节分开来保存,这就不得不用到正则表达式来进行拆分了,看下面的示例代码:

<%
content=regExReplace(content,"第[一二三四五六七八九十百]*章","|Angel章|")
content_array=split(content,"|Angel章|")
%>

函数regExReplace的代码为:

Function regExReplace(sSource,patrn,replStr) 
Dim regEx, str1 
str1 = sSource 
Set regEx = New RegExp 
regEx.Pattern = patrn 
regEx.IgnoreCase = True 
regEx.Global = True 
regExReplace = regEx.Replace(str1, replStr) 
End Function 

2.当验证数据或者变量格式的时候,就要用到了,这个就不多说了,虽然现在都流行用JS进行前台验证,但是要想让你的程序安全,在后台里也必须得再次验证! 

下面来看正则表达式在VBScript也就是ASP中的应用   
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   
%>  

TAGS:ASP正则表达式

猜你喜欢

NewHot