我正在从USPS获取连接的地址行..我想以某种方式打破它

时间:2011-07-08 02:51:27

标签: java javascript flex web-services

我们正在发送地址Line1和地址Line2进行验证。

当它进入USPS验证时,验证后它会连接地址行1中的两个地址行。

例如:

AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22

验证后,它会连接两个地址行:

AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null

我想将返回的地址Line1作为经过验证的地址分成两行,我该怎么做?

4 个答案:

答案 0 :(得分: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的寻址标准吗?

答案 1 :(得分:1)

USPS从您提交的AddressLine2字段连接单元信息的读取是因为它实际上属于AddressLine1(根据其规范)。 AddressLine2仅用于帮助邮件发送者发送邮件的无关信息(请参阅USPS publication 28)。

如果您希望将二级信息(公寓,单位等)拆分为单独的字段,最好使用利用官方USPS数据的服务来验证并将地址解析为其各种组件。以及组成的交付线。

我是SmartyStreets的软件开发人员,REST/JSON endpoint是一家地址验证公司,通过API提供此类服务。我们的{{3}}提供了单独的地址组件以及完整的交付行。这样您就可以以适合您业务需求的方式对数据进行分组。

答案 2 :(得分:0)

在发送对象进行验证之前,请确保保留对象的副本。

然后,当您获得经过验证的对象时,可以将旧对象的地址信息复制到新返回的对象中。

修改

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

我不确定验证的参与程度如何(例如,它不只是处理大小写)。但是,如果我们假设原始地址中的每个字都映射到新地址中的一个字,那么一个简单的想法就是逐字复制地址。

在您的示例中,原始AddressLine1中有三个单词。因此,您可以阅读新AddressLine1中的三个单词,并保留它们。然后可以将剩余的两个单词复制到新的AddressLine2中。通过在Scanner上使用String可以轻松实现这一目标。对于更熟练的人,我确信有一个可以使用的基于单词的正则表达式模式,但我对这些东西并不是那么好。

答案 3 :(得分:0)

我会搜索街道后缀(在这种情况下是AVE)到split()它回到两行。它并不完美,但考虑到要求,它将尽可能正确。

您可以从此处获取已识别的USPS街道后缀列表列表:

http://www.usps.com/ncsc/lookups/abbr_suffix.txt

请注意,这也考虑了缩写,并且看到它是theri列表,他们也可能在验证期间使用这些(高可能性,返回的地址将更改为这些标准格式之一)。

我不喜欢字数统计的想法。我生活在众多的街道上会产生问题。 Meadowcrest Dr vs. Meadow Crest博士我认为这是验证程序将要进行的更改类型的完美示例。

一旦你拥有了它,我认为它非常简单。如果您需要更多信息,请告诉我