ASP编程:如何利用XSL和正则表达式来考证数据的有...
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。数据|正则系列之十七:怎样利用XSL和正则表达式来考证数据的无效性XSL如今正在渐渐的成为XML中的相似与SQL在数据库计划中的位置。
固然MicrosoftsXSL仅仅是完成了个中的某一些部分的功效
可是你已可以完成十分庞大的查询了
固然如今的XSL仅仅还只是一种基于地道文本和字符串体例
的查询言语
鄙人面先容的例子中,将大批利用到文本内的字符串体例的搜刮,
你会发明在XML中对数据的处置很年夜一部分都是要利用到文本内的查询的。
这在XSL的编写中是一件十分提高的功效。
恰是由于如许,你应当懂得一些正则表达式应当怎样来利用。
正则表达式的复杂先容
正则表达式年夜部分都是来自与Unix天下的必要。
在Unix中很多编程言语几近全部都是环绕着正则表达式举行的(比方Perl,Python,Tcl)
可是使人感应奇异的是正则表达式好象是比来才利用在Windows系列中的,
出格是大批的利用在剧本言语中,比方JavaScript和VBScript,
只管你也能够将它们利用在VisualBasic或则Java中,可是明显它们仿佛在
剧本言语中加倍有吸引力。大概是这个原因把,人人平常仿佛都很少利用正则表达式把。
利用正则表达式,你能够依据你想查询的内容创建一个婚配模板(英文叫pattern)
一旦你利用正则表达式创建了一个模板,你就能够利用它来测试你的字符串了,
利用它能够完成良多功效:
比方判别一个字符串是不是在别的一个字符串中(或则在别的一个字符串中的甚么地位)
比方利用一个字符串来交换别的一个字符串
比方前往一切满意模板前提的字符串列表
比方。。。等等等等
下面我先容了有关正则表达式的基础观点,有关它的具体申明和语法能够查阅MSDN和
JavaScript中的有关匡助。
在VB中假如你想援用正则表达式的话,你必要在项目中援用"MicrosoftVBScriptRegularExpressions"。可是假如你如果利用剧本的话就不用要了,由于在剧本内里这已是一个
内涵的工具供你援用了。
固然你必要在你的呆板上安装IE4以上罗。
这个工具(在JavaScript中)叫RegExp
上面仍是让代码来讲明成绩把,如今假定你想检察一个文挡内里是不是包括一个特定的
字符串(比方"regularexpressions")
代码见下:
代码利用VB写成。
PublicFunctionIsTermInDocument(filePathAsString,_
exprAsString)AsBoolean
DimfsAsFileSystemObject
DimtsAsTextStream
DimreAsRegExp
DimtextAsString
Setfs=NewFileSystemObject
Setts=fs.OpenTextFile(filePath,ForReading)
text=ts.ReadAll
Setre=NewRegExp
re.Pattern=expr
IsTermInDocument=re.Test(text)
EndFunction
Debug.printIsTermInDocument("c:inmyPage.htm",_
"regularexpression")
下面的谁人函数将依据文挡内里是不是有满意前提的字符串前往True/False.
注重我加粗的部分:
第一句是创建一个正则表达式的工具
第二句是指定该正则表达式的模板
第三句就是依据模板实行查询了
呵呵,假如正则表达式的功效仅仅是这么复杂的话,大概你会说
VB中的instr()不就可以够取代了吗?
可是,在举行XML的数据格局化的时分,对字符串的处置远比这个庞大很多。
比方:假定你要确保你要考证的字段中是不是包括一个well-formed的zip编码
(well-formed意味着它是一个无效的编码,
大概它关于某个给定的中央或则地区或则国度又是有效的
这类界于well-formed和valid的表达式将是本文内里会商的重点)
假如你如果利用VB来举行这类判别的话将十分的丢脸
你必要判别是不是表达式有5位或则10位数字,或则是不是为字母,
然后第6位字母又必需得是一个破则号
可是假如是利用正则表达式的话,将会是如许的复杂:
SetIsZipCode=NewRegExp
IsZipCode.Pattern="^d{5}(-d{4})?$"
ifIsZipCode.test("32545-2198")then
上面将复杂注释一下个中模板的寄义:
^申明在这个表达式之前没有任何别的的字符串,
意味着要考证的表达式不是某个字符串两头的一部分,而是它的开首
d暗示下一个字符必需是0-9中的一个数字
d{5}而且必需是连着的5个数字
-d{4}4个数字必需呈现在字符"-"的前面
(-d{4})?这4个数字是可选的,便可有也能够没有
$这个表达式前面应当不会再有别的的甚么器材了
最成心思的是一旦你界说好了这么一个模板,你就能够将它利用在
任何别的的正则表达式工具中,而不必要再从头创建一个正则表达式工具了了。
利用这个举措,你乃至能够把一个近2000行代码的JavaScript程序
削减到只要几百行,设置当你把一些模板组合在一同的时分,就可以够完成
正则表达式原本不成能完成的东东了。
上面我再举一个用来考证数占有效性的例子:
比方你如今想考证一个德律风号码数据是不是无效
关于通用一个德律风号码一样平常上面这几种写法都是无效的:
(800)555-1212
1(800)555-1212
1-800-555-1212
1.800.555.1212
等等.
假如你利用剧本来写一段满意下面一切请求的代码将十分的庞大。
可是假如你利用正则表达式的话,将十分的复杂,只要上面这两句代码:
SetIsPhoneNumber=newRegExp
IsPhoneNumber.pattern="^?s*[(.-]?(d{3})[).-]?s*(d{3})[.-](d{4})$"
你能够细心体味下面这个代码的意义。
起首它考证第一个字符是不是为0或则是不是为1或则基本就没有。
然后再举行上面的考证,人人能够本人揣摩别的部分的意义把,呵呵。
查询和交换数据
固然,考证数据的无效性仅仅是它可以做的一件大事罢了,
可是更有效的是:假如你可以把下面那末多种德律风号码的表达体例转换
成一种一致的体例显现出来。
比方我要把下面的德律风号码格局化成XML中的一个片断以下:
<phoneNumber>
<areacode>123</areacode>
<exchange>456</exchange>
<local>7890</local>
</phoneNumber>
这时候的德律风号码的模板分红三个部分:
(d{3}),(d{3}),(d{4}),分离暗示areacode,exchange,和localnumber
.在正则表达式中,正则注释器会主动
将婚配的字符赋值给变量$1,$2,$3,等.
如许你利用上面的代码就可以够完成
re.Replace("1(352)351-4159","<phoneNumber><areacode>$1</areacode><exchange>$2</exchange><local>$3</local></phoneNumber>")
假如你以为这个Replace利用起来很不恬逸的话,上面将给出一个
相似与VB中的Replace而且扩大了它的函数
PublicFunctionReplacex(sourceStrasString,oldStras_
String,newStrasString,optionalignoreCaseas_
Boolean=False,optionalisGlobalasBoolean=True)
DimreAsNewRegExp
re.Pattern=oldStr
re.Global=isGlobal
re.IgnoreCase=ignoreCase
Replacex=re.Replace(sourceStr,newStr)
EndFunction
上面给出利用它的一些例子:
Debug.PrintReplacex("Thisisatest","is","at")
-->"Thatatatest"
最出色的仍是利用正则表达式了
Debug.PrintReplacex("Thisisatest","ws","at")
-->"Thatata</p>缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。 不能只是将它停留在纸上谈兵的程度上。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的? 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
页:
[1]