使用正则表达式验证本地化数据2010-12-16本文讨论将正则表达式与 Java ResourceBundle 相结合的一种数据验证技术 。Java 语言对正则表达式的支持可以大大简化数据验证。您可以将数据与正则 表达式进行比较,如果它们匹配,则知道数据是有效的。另一方面,Java ResourceBundle 包含翻译好的字符串,用于匹配用户机器上的当前语言和国家 设置。ResourceBundle 中的字符串通常是出现在应用程序中的文本,但是也可 以是特定于某个地区的任何东西。您将实践一个示例应用程序,该应用程序从 ResourceBundles 获得正则表达 式,并将它们用于数据验证(请参见 下载 小节)。通过这种方法,就可以用一 块代码来验证很多不同类型的数据。更妙的是,随着更多 ResourceBundle 的添 加,还可以验证更多类型的数据,并且不用更改这段代码中的任何一行。本文的示例应用程序是在 Eclipse 中用 Visual Editor 构建的。Visual Editor 是一种用于构建图形化界面的开放源码工具。为了构建自己的应用程序 ,您需要在计算机上安装 Eclipse 和 Visual Editor 包(请参阅 参考资料) 。这个示例应用程序只是举例说明了验证数据的一种技巧,所以这种方法可用于 任何 Java 应用程序。示例应用程序我不想花太多的时间讨论这个示例应用程序的所有细节,我只关注其中的数 据验证方面的技巧。这个应用程序验证输入到输入域中的邮政编码。您可能知道 ,在世界的不同地方,邮政编码千差万别。有的是数字,有的则包含字母。即使 同是由数字组成的邮政编码,在不同地方其长度也不尽相同。有的国家以特定的 模式排列字母和数字,而另外一些国家则采用更自由的格式。所有这些格式都可 以用正则表达式来描述。例如,在美国邮政编码是一个五位数,后面还可能跟有 一个破折号加一个四位数。清单 1 展示了描述这种格式的正则表达式:清单 1. 用于美国邮政编码的正则表达式
[0-9]{5}(-[0-9]{4})?除了格式不同外,邮政编码并不总是被称为邮政编码。例如,美国将邮政编 码称为 ZIP Code。ResourceBundle 的一种常见用法就是处理这种类型的与地区 有关的差异。用于美国的 ResourceBundle 可能包含短语 "Enter your ZIP Code",而在用于加拿大的 ResourceBundle 中,相应的短语可能是 "Enter your postal code"。我在本文中演示的技巧也是从 ResourceBundle 获得用于有效邮政编码的正则表达式。为了使这个示例简单化,您将创建一个只有一个输入域和一个 Validate 按 钮的 Swing 应用程序。用户在输入域中输入文本,然后单击该按钮。如果数据 与当前的正则表达式匹配,则应用程序显示一条消息,表明邮政编码有效。因为 应用程序使用不同的 ResourceBundle,所以正则表达式随着有效数据的规则的 变化而变化。由于正则表达式是从文本文件中装载的一个字符串,所以当添加对 新类型的邮政编码的支持时,不需要更改代码。您将在 Eclipse 中使用 Eclipse Visual Editor 和 Eclipse Java Development Tool 的一些特性来构建这个应用程序。您可以在几乎所有开发环 境中使用这种技巧。这里的代码应该可以在任何基于 Eclipse 的产品中运行, 例如 Rational Application Developer(请参阅 参考资料)。图 1 展示了该应用程序在 Eclipse Visual Editor 中的样子:图 1. Eclipse Visual Editor 中的示例应用程序

Visual Editor 提供了四种查看应用程序的方式。在屏幕的顶端是应用程序 的可视化图像,源代码在底端。Eclipse 还提供了两个视图 —— Properties 视图和 Java Beans 视图 —— 可以通过这两个视图来 处理应用程序。所有这些查看应用程序的方式都是由 Eclipse Modeling Framework (EMF) 控制的。由于已经有一些关于 EMF 的完整书籍,所以我不会 再谈更多的细节。从程序员的角度来看,重要的一点是,任何视图中的变化都会 自动发送到其他视图。例如,如果您使用 Properties 视图将一个对象的背景颜 色设为绿色,那么可视化图像和源代码也会自动更新。