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

sigwle7e  于 2022-09-21  发布在  Apache
关注(0)|答案(4)|浏览(144)

我们正在发送地址行1和地址行2以进行验证。

当它被送到USPS进行验证时,在验证之后,它连接地址行1中的两个地址线。

例如:

AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22

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

AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null

我想将返回的地址行1作为已验证的地址拆分为两行,我该怎么做?

8qgya5xd

8qgya5xd1#

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的寻址标准?

vqlkdk9b

vqlkdk9b2#

USPS上的读数连接了您提交的AddressLine2字段中的单位信息,因为它实际上属于AddressLine1(根据他们的规范)。AddressLine2仅用于帮助 Postman 递送邮件的无关信息(参见USPS出版物28)。

如果您想要次要信息(公寓、单位等)拆分到一个单独的字段中,最好使用一个服务,该服务利用官方的USPS数据来验证地址并将其解析为它的各个组件以及组成的递送行。

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

k2arahey

k2arahey3#

只需确保您在发送对象进行验证之前保留了该对象的副本。

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

编辑

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

我不确定验证有多复杂(例如,它不仅仅是处理大小写)。然而,如果我们假设原始地址中的每个词都Map到新地址中的一个词,那么一个简单的想法是逐个词地复制地址。

在您的示例中,原始AddressLine1中有三个单词。这样你就可以从新的AddressLine1中读取三个单词,并保留它们。然后可以将剩下的两个字复制到新的AddressLine2中。这可以通过在String上使用Scanner轻松实现。对于更熟练的人,我相信有一种基于单词的Regex模式可以使用,但我不太擅长这些东西。

xn1cxnb4

xn1cxnb44#

我会搜索街道后缀(在本例中为Ave),将其重新放回两行。它不会是完美的,但考虑到要求,它会尽可能地正确。

您可以从以下地址获取已识别的USPS街道后缀列表:

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

请注意,这也考虑了缩写,因为这是列表,他们也可能在验证期间使用这些缩写(返回的地址很可能会被更改为这些标准格式之一)。

我不喜欢字数计算的想法。我曾在无数条街道上生活过,这会制造一个问题。Meadowcrest博士VS Meadow Crest博士我认为这是一个完美的例子,说明了验证例程将进行的更改类型。

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

相关问题