旁注:我想将代码与GWT一起使用,因此正则表达式和第三方库存在限制。否则我只会使用net.sourceforge.jgeocoder。
答案 0 :(得分:4)
如果您打算使用正则表达式,这适用于严格格式化的ZIP: ^ \ d {5}(?[ - +] \ d {4})?$
但仍有问题。某些应用程序尝试将5位ZIP解释为整数 - 例如Microsoft Excel。这意味着有时在前面有零的ZIP,例如新英格兰和波多黎各的那些,经常会出现问题。因此,您可能还需要考虑查找3位和4位数值。
美国的“第一”邮政编码为00501,是美国国税局。 (也许我们不应该允许那个验证!)当被解释为整数时,它是501.现在我们遇到了问题。
这一点很重要,因为与具有mod 10校验和的信用卡不同,地址不是自我验证的。这意味着如果没有某种外部权限,您无法知道地址是否已正确格式化和标准化。
一旦您需要通过外部机构标准化地址,您就可以验证并确认地址。
我应该提一下,我是SmartyStreets的创始人。我们有一个基于网络的address verification service,您可以通过编程方式向我们提交地址,我们会对其进行清理,对其进行标准化并对其进行验证。
答案 1 :(得分:2)
\\d{5}
作为一个正则表达式我相信将是一个起点
代码:
String[] tokens = string.split("\\d{5}");
// check token length.
从我的手机上完成,原谅拼写和语法
答案 2 :(得分:1)
对我有用的是:
(\d{5}(?=\s|$))|(\d{5}-\d{4}(?=\s|$))
答案 3 :(得分:0)
用正则表达式表达非常简单:“^ \ d {5}”
看看如何在java中实现正则表达式映射:http://www.regular-expressions.info/java.html
答案 4 :(得分:0)
使用正则表达式。
\d{5}
因为zip应位于地址的末尾
\d{5}$
答案 5 :(得分:0)
美国有两种形式的Zip。一个5位数字(称为邮政编码)和一个9位数字(称为zip +4)。以下是解析任何有效美国邮政编码的算法: 假设:起点是一个包含邮政编码(或zip + 4)候选人的字符串。
仅修改为5位数的zip:
答案 6 :(得分:0)
这是我用来解析地址字符串中的zipcode并将其与zipcodes数组进行比较的方法。地址字符串的格式为: 1234 Easy St,City,State 55555,USA。它还将处理拉链55555-5555
private static final Pattern pattern = Pattern.compile("\\d{5}(?:[-\\s]\\d{4})?");
private static int []zipcodes = {<your array of zips>};
public static boolean isInServiceArea(String address) {
Matcher matcher = pattern.matcher(address);
int zipcode = 0;
if (matcher.find()) {
zipcode = Integer.parseInt(matcher.group(0));
Log.d(TAG, "zipcode: " + zipcode);
}
for (int code : zipcodes) {
if (code == zipcode) {
return true;
}
}
return false;
}