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

本文讨论将正则表达式与 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 视图将一个对象的背景颜 色设为绿色,那么可视化图像和源代码也会自动更新。

时间: 2024-09-29 00:45:28

使用正则表达式验证本地化数据的相关文章

正则表达式--QQ微信、优酷前端 邮箱正则表达式验证 Bug_正则表达式

拿邮箱验证来说,网上绝大部分人写的邮箱验证正则表达式代码都不能验证这邮箱: i@julying.com,也不能验证 xxxxxx@i.com . 上次我发现youku.com(优酷网)用户注册就有这个问题,见图:     今天发现 QQ微信 也同样有这个问题:     他们都不能验证一个字母的域名或一个字母的用户名. 我认为,他们绝不是故意不让这样的用户注册,而是这样: 很久之前,最初写正则的程序员偷懒了,没有写 这样情况的正则表达式验证, 他当时可能觉得这样的正则比较麻烦,而且可能这样的邮箱实

IOS用正则表达式验证textfield输入的内容是否合法

iphone 4.0以后就开始支持正则表达式的使用了,在ios4.0中正则表达式的使用是使用NSRegularExpression类来调用.   1. 下面一个简单的使用正则表达式的一个例子:NSRegularExpression 类 -(void)parseString{ //组装一个字符串,需要把里面的网址解析出来 NSString *urlString=@"sfdsfhttp://www.baidu.com";   //NSRegularExpression类里面调用表达的方法需

php使用正则表达式验证网址链接

之前折腾了一个短网址程序,过程挺顺利的,唯一就是在验证网址这一步卡了壳,花费了整个过程的一大半时间,最终经过一番搜索.折腾和测试,才算找到一个完美的解决方案. 在短网址程序中,验证网址无疑是很重要的.且不说各种安全问题,就是一些「浑水摸鱼」的网址占据大量的短网址都非常让人头疼. 提到验证网址,我相信大多数人第一时间反应出来的都是正则表达式,的确,这很科学,但何奈自己正则太渣,平时想要匹配一段复杂的 HTML 都要反复调试半天,更何况我连网址的结构都不能完全梳理清楚,所以还是绕过它,咱能不用就别自

js正则表达式验证大全(收集)_正则表达式

引用网址  http://hi.baidu.com/quiteuniverse/blog/item/9f3f043d46ad1e07bba16716.html 以下函数调用方式:    function check() { var bb = document.getElementById("txt_id").value;//txt_id为文本框的ID alert(ismobile(bb));//ismobile 代表以下任何一个函数名称 } HTML代码:   <input ty

日常收集整理正则表达式验证大全_正则表达式

常用正则表达式大全!(例如:匹配中文.匹配html) 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能

正则表达式验证时间

提供一款js 正则表达式验证时间函数,并且详细的说明关于如何验证日间日期正则写法规则哦. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net /1999/xhtml">

RegularExpressionValidator正则表达式验证电子邮件

RegularExpressionValidator有两种主要的属性来进行有效性验证.ControlToValidate 包含了一个值进行验证.如取出文本框中的值.如ControlToValidate="TextBox1" ValidationExpression 包含了一个正则表达式进行验证.好了,有了上面的叙述,我们就举个例子来说明正则表达式.比如,我们想要对用户输入的电子邮件进行校验,那么,什么样的数据才算是一个合法的电子邮件呢?我可以这样输入:test@,当然我也会这样输入:x

Shell正则表达式验证IP地址

  这篇文章主要介绍了Shell正则表达式验证IP地址,本文给出了多个方法,并分别给出实现代码,需要的朋友可以参考下 本机多个IP 代码如下: ifconfig | awk '/inet/{print $2}' | awk -F: '{print $2}' 首先,先用这个来着 代码如下: CheckIPAddress() { echo $1 > /tmp/tmpserverip echo $1 |grep "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1

利用js正则表达式验证手机号,email地址,邮政编码

 利用js正则表达式验证手机号,email地址,邮政编码.需要的朋友可以过来参考下,希望对大家有所帮助 手机号码的验证(13开头和158,159开头,共11位)  代码如下: var re; var ss=document.getElementById('textbox3').value; re= /^(13[0-9]{9})|(15[89][0-9]{8})$/ if(re.test(ss))  {    document.getElementById('label3').innerText=