我从USPS收到的是连贯的地址行,我想用一些方法来打破它。

问题描述 投票:0回答:4

我们发送地址线1和地址线2进行验证。

而当它进入USPS进行验证时,验证后它会将地址Line1中的两行地址连在一起。

比如说

AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22

在验证后,它将两行地址连在一起。

AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null

我想把返回的地址线1作为一个验证过的地址重新分成两行,怎么做?

java javascript apache-flex web-services
4个回答
1
投票

USPS的验证是重新格式化文本,而不仅仅是将两行连在一起。我不知道不同类型的地址可能涉及到什么样的重新格式化,但在您的例子中,唯一的区别似乎是它已经从大写字母变成了混合字母,而且公寓号码也发生了变化。我对如何处理信息的改变(比如号码改变)没有建议,但如果只是大写字母改变,你可以做如下处理。

// you specified both Java AND JavaScript; I've picked JavaScript

var originalLine1 = "...",
    originalLine2 = "...";

// somehow call USPS validation to set the following:
var validatedLine1 = "...",
    validatedLine2 = "...",
    validationPassed = true || false;

// now, did validation pass?
if (validationPassed) {
  // if we can match the old line 1 with the left-hand side
  // of the new line 1, and we're not going to be overwriting
  // a non-null value in the new line 2 then split the new line 1
  if (validatedLine2 === null &&
      originalLine1.toLowerCase()
        === validatedLine1.substr(0,originalLine1.length).toLowerCase()) {

    validatedLine2 = validatedLine1.substr(originalLine1.length);
    validatedLine1 = validatedLine1.substr(0, originalLine1.length);
  }
  // do something with the results
}

话说回来,调用USPS验证的目的是什么?如果它修改了文本,但其他方面通过了验证,也许你应该只使用修改后的版本,因为这大概是遵循USPS的寻址标准?


2
投票

USPS之所以将您提交的AddressLine2字段中的单位信息连接起来,是因为它实际上属于AddressLine1(根据他们的规范)。 AddressLine2只用于提供有助于邮件承运人递送邮件的无关信息(见 "地址线1")。美国邮政总局出版物28).

如果您想将次要信息(公寓、单位等......)分割成一个单独的字段,您最好使用利用USPS官方数据的服务来验证和解析地址到它的各种组件以及组成的交付线。

我是一个软件开发人员 SmartyStreets我们是一家地址验证公司,通过API提供这样的服务。 我们的 RESTJSON端点 既提供了单独的地址组件,也提供了完整的交付线。这将允许您以任何适合您业务需求的方式对数据进行分组。


0
投票

只要确保在发送对象进行验证之前,保留一份对象的副本。

然后,当你拿到验证后的对象时,你可以将旧对象的地址信息复制到新返回的对象中。

编辑

我错误地使用了 "复制 "旧信息这个词,尽管事实上复制不是你想要的。

我不知道验证有多复杂(例如,它是否不仅仅是处理大写字母)。然而,如果我们假设原始地址中的每一个字都映射到新地址中的一个字,那么一个简单的想法就是逐字复制地址。

在您的例子中,原来的 AddressLine1 有三个字在里面。所以你可以从新读三个字。AddressLine1,并保留它们。剩下的两个词可以复制到新的 AddressLine2. 这可以通过使用 Scanner 在...上 String. 对于更熟练的人来说,我相信有一个基于单词的Regex模式可以使用,但我不太擅长这些东西。


0
投票

我会搜索街道的后缀(在本例中是AVE),以达到 split() 变成两行。 它不会是完美的,但它将是尽可能正确的要求。

你可以从这里得到一个公认的USPS街道后缀列表。

http:/www.usps.comncsclookupsabbr_suffix.txt

需要注意的是,这也考虑到了缩写,看到是theri列表,他们在验证过程中也很可能使用这些缩写(很有可能返回的地址会被改成这些标准格式之一)。

我不喜欢字数这个概念。 我住在许多街道上,会产生一个问题。 Meadowcrest Dr vs. Meadow Crest Dr.我认为这是一个完美的例子,说明了验证例程会做的改变类型。

一旦你有了这些,我想从那里开始就很简单了。 如果你需要更多信息,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.