Java中使用正则表达式验证本地化数据

1/5/2008来源:Java教程人气:5545


  数据验证是编写任何用户界面时经常要处理的一项杂务。java? 语言的正则表达式支持可以使数据验证变得更轻易。您可以定义一个正则表达式,用于描述有效数据,然后让 Java 运行时检查它是否匹配。但是有些类型的数据在不同地区有不同的格式。
而 ResourceBundle 类让您可以以一种优雅的方式使用特定于地区的数据。本文展示如何结合这两种技术来解决常见的数据输入问题。

  本文讨论将正则表达式与 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 中的示例应用程序
Java中使用正则表达式验证本地化数据(图一)

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

  运行初始的示例应用程序

  首先来看一个已经创建好的应用程序。图 2 展示了这个应用程序的运行界面:

图 2. 输入有效数据时的示例应用程序
Java中使用正则表达式验证本地化数据(图二)

  在图 2 中,用户输入了有效的数据,并单击了 Validate 按钮。假如数据无效,那么将出现图 3 所示的界面:

图 3. 输入无效数据时的示例应用程序
Java中使用正则表达式验证本地化数据(图三)

  清单 2 展示了如何使用 清单 1 中的正则表达式来验证数据:

清单 2. 使用正则表达式