如何使用XSL和正则表达式来验证数据的有效性(一)
系列之十七:如何使用XSL和正则表达式来验证数据的有效性 XSL现在正在逐渐的成为XML中的类似与SQL在数据库设计中的地位。 虽然Microsoft''s XSL仅仅是实现了其中的某一些部分的功能 但是你已经能够实现非常复杂的查询了 虽然现在的XSL仅仅还只是一种基于纯粹文本和字符串方式 的查询语言 在下面介绍的例子中,将大量使用到文本内的字符串方式的搜索, 你会发现在XML中对数据的处理很大一部分都是要使用到文本内的查询的。 这在XSL的编写中是一件非常普及的功能。 正是因为这样,你应该了解一些正则表达式应该如何来使用。 正则表达式的简单介绍 正则表达式大部分都是来自与Unix世界的需要。 在Unix中许多编程语言几乎整个都是围绕着正则表达式进行的(例如Perl, Python, Tcl) 但是令人感到奇怪的是正则表达式好象是最近才使用在Windows系列中的, 特别是大量的使用在脚本语言中,例如JavaScript和VBScript, 尽管你也可以将它们使用在Visual Basic或则Java中,但是显然它们似乎在 脚本语言中更加有吸引力。也许是这个缘故把,大家平时似乎都很少使用正则表达式把。 使用正则表达式,你可以根据你想查询的内容建立一个匹配模板(英文叫pattern) 一旦你使用正则表达式建立了一个模板,你就可以使用它来测试你的字符串了, 使用它可以完成很多功能: 例如判断一个字符串是否在另外一个字符串中(或则在另外一个字符串中的什么位置) 例如使用一个字符串来替换另外一个字符串 例如返回所有满足模板条件的字符串列表 例如。。。等等等等 上面我介绍了有关正则表达式的基本概念,有关它的详细说明和语法可以查阅MSDN和 JavaScript中的有关帮助。 在VB中如果你想引用正则表达式的话,你需要在项目中引用"Microsoft VBScript Regular Expressions"。但是如果你要是使用脚本的话就不必要了,因为在脚本里面这已经是一个 内在的对象供你引用了。 当然你需要在你的机器上安装IE4以上罗。 这个对象(在JavaScript中)叫RegExp 下面还是让代码来说明问题把,现在假设你想查看一个文挡里面是否包含一个特定的 字符串(例如"regular expressions") 代码见下: 代码使用VB写成。 Public Function IsTermInDocument(filePath As String,_ expr As String) As Boolean Dim fs As FileSystemObject Dim ts As TextStream Dim re As RegExp Dim text As String Set fs = New FileSystemObject Set ts = fs.OpenTextFile(filePath, ForReading) text = ts.ReadAll Set re = New RegExp re.Pattern = expr IsTermInDocument = re.Test(text) End Function Debug.print IsTermInDocument("c:\bin\myPage.htm",_ "regular expression") 上面的那个函数将根据文挡里面是否有满足条件的字符串返回True/False. 注意我加粗的部分: 第一句是建立一个正则表达式的对象 第二句是指定该正则表达式的模板 第三句就是根据模板执行查询了 呵呵,如果正则表达式的功能仅仅是这么简单的话,也许你会说 VB中的instr()不就能够代替了吗? 但是,在进行XML的数据格式化的时候,对字符串的处理远比这个复杂得多。 例如:假设你要确保你要验证的字段中是否包含一个well-formed的zip编码 (well-formed意味着它是一个有效的编码, 也许它对于某个给定的地方或则区域或则国家又是无效的 这种界于well-formed和valid的表达式将是本文里面讨论的重点) 如果你要是使用VB来进行这种判断的话将非常的难看 你需要判断是否表达式有5位或则10位数字,或则是否为字母, 然后第6位字母又必须得是一个破则号 但是如果是使用正则表达式的话,将会是这样的简单: Set IsZipCode = New RegExp IsZipCode.Pattern = "^\d{5}(-\d{4})?contentquot; if IsZipCode.test("32545-2198") then 下面将简单解释一下其中模板的含义: ^ 说明在这个表达式之前没有任何其它的字符串, 意味着要验证的表达式不是某个字符串中间的一部分,而是它的开头 \d 表示下一个字符必须是0-9中 |
查看所有评论
