第十五章. 验证,格式化及正则表达式

  验证, 格式化及正则表逹式这几个单词给读者的第一印象可能会比较陌生。其实, 开发者在日常的工作中已经不知不觉地接触过不少类似的事物, 比如说: 透过剖析字符串的格式去检测某种模式; 当特定的字符串模式被检测或没有检测到时修改字符串至一定模式; 当一些必要的属性没有被检测到的时候, 返回错误讯息等。因为一些日常事物如电话号码, 姓氏字符的大写, 货币格式, 邮编及国际标准图书编号(ISBN)等数据, 一般来说都会由第三方程序或用户本身来提供的, 所以难以保证这些数据的格式是否合乎我们程序的要求。Flex Framework 本身就内建了两个强大的类分别为Validator 和Formatter, 它们分别为各个UI 组件提供这一类型剖析及格式化的功能。接下来就是正则表逹式(Regular Expressions), 它是一个新引进入的ActionScript 语言及Flash Player 的编程工具。它强大的功能为不少用户留下深刻的印象, 但其过于复杂的语法也使人对它又爱又恨。

  Validator, 即验证器作为一个事件发送器, 可以用来检测Flex 控件的属性, 以确保它可以满足一些的预定的参数。这些参数可以以被指定为某种的格式, 例如一个属性是否必要的或者该属性的长度限制等。由于验证器的高度整合性, 通过以下两个设置, 验证的结果可以轻易地显示出来:
1. 设置验证器类的事件源, 即是使用者输入的接口。
2. 设置那些属性会被会检查。

  验证器会发送一个事件去控件, 根据所传递的事件, 这个控件会在验证器内显示一个自定义的错误信息。Flex Framework 本身已经提供了不少内建的验证器, 例如: 信用卡号码, 电话号码, 电邮地址及社会安全号码等。在这个章节里, 我们集中讨论如何建设自定义的验证器及如何将验证器及相关事件跟控件整合。

  Formatter, 以下称为格式器, 负责一个简单而非常重要的工作, 那就是把任何传入的数值转换作所指定的格式。比如将一个包含9 位连续数目的字符串转换成一个格式化的电话号码,那就是由555555555 转成(555) 555-5555, 还有日期格式转换, 或不同国家邮政编号的格式转换等。格式器本身就为用户定义了一个重要的方法, 那就是format(格式)。它是用来接收输入数据以及返回一个恰当的字符串。

  以上所提及的两个类, 原则上是可以通过正则表达式(Regular Expression)来进行字符串的处理, 虽然这种方法在基础类中是不常用的。正则表达式是一种被公认为强大, 高雅且难于应用的现代化编程开发工具。程序员可以使用这套工具去为一些特定的字符串创建各种复杂的处理规则。几乎所有主流的编程语言都内建了正则表达式处理引擎, 虽然它们可能功能上各有分别, 但语法却是大致相同的。所以, 正则表达式为你的作品来说绝对是一套非常实用的工具。在ActionScript 里头, 正则表达式是以一个名为RegExp 的类来表逹的, 它包含着了两个基础的方法:
test”, 是用于检测一个字符串是否包含任何与RegExp相配的文字, 并返回一个布朗值(True/ False).
exec”, 用于返回一个包含所有相配的项目的数组及对象, 以及包含这个事件第一次发生时所在字符串的相对位置的字符串。

  正则表达式也可以通过match, search 及replace 等String 类的方法来进行检测。当中, 我发现String 类的方法是十分有用的, 因为在正则表达式中它们允许来对个别的字符进行处理。

  正则表达式是一个非常庞大的主题, 如果要对其进深入探讨的话, 恐怕要用掉整本书的篇幅。

  所以在本章节中, 我们只会对特定的观点进行探讨以及为一些一般性的问题提供解决方案,而不会尝试去展示一些比较普遍的使用个案。

目录

15.1.在TextInput及TextArea控件上使用Validator 和Formatter

15.2.如何创建一个自定义的Formatter

15.3.使用正则表达式创建国际化邮政编码Validator

15.4.如何创建一个Validator去验证通用商品代码(UPC)

15.5.如何去验证多个Combo Box及Radio Button组件

15.6.如何在一个表单内通过ToolTips来返映一个错误

15.7.如何使用正则表达式去定位电邮地址

15.8.如何使用正则表达式去验证信用卡号码

15.9.如何使用正则表达式来验证ISBN号

15.10.如何通过指定字符类(Explicit Character Class)来创建正则表达式

15.11.如何在正则表达式中使用字符类型

15.12.如何通过子表达式来验证IP 地址是否有效呢?

15.13.如何使用正则表达式来为不同类型进行匹配?

15.14.如何用正则表达式来为行的开端或结尾进行匹配?

15.15.如何使用逆向引用?

15.16.如何使用向前查找组或向后查找组语法?

加支付宝好友偷能量挖...


评论(0)网络
阅读(103)喜欢(0)flash/flex/fcs/AIR