我也在SmartyStreets工作,由于我不是开发人员,我不受任何限制,比如“无法完成”或“没有办法可靠地执行”。事实上,我提出的想法可能并不总是可能的,但是,我是一个解决问题的人,一个解决方案发现者,而这个特殊的问题绝对有一个解决方案。
您将需要以下内容:一小段正则表达式,对脚本语言(python,php,任何您喜欢的知识)的了解以及对地址验证工具的访问权限(这是必需的,以便您知道何时才能正确使用) 。
所以,让我们开始与例句:
嘿,伙计们见我在1234苹果街纽约,NY 10011见!
我们可以肯定,每个地址都有一个开始和结束。 (你可以把它带到银行!)
所以,如果你运行一个正则表达式来寻找字符串内地址的开始,你可以在地址开始之前消除所有的东西。这里有一个正则表达式,将做到这一点:
(^(.*(?=p\.?o\.? box|h\.?c\.?r\.? |c\.?m\.?r\.?)|^[^0-9]+))
这会给你回如下:
1234苹果街纽约,NY 10011见!
现在,你已经到了一半,但你需要循环剩余的字符串。另一个可以肯定的假设是,一个地址永远不会超过328个字符(我填写了这个数字,但是你得到了这张图片,一个地址也必须有一个结尾,你可以通过确定一个地址来缩短字符串最大可接受的USPS地址长度。)
您将循环访问地址字符串,直到获得有效地址。要做到这一点,从头开始,每增加一个排列,向右移动一个词。这是地址验证服务派上用场的地方,因为您不知道地址结束的位置,这就是您需要知道的。因此,您从字符串中生成的每个排列(请记住,您从左侧开始)将被发送用于验证。由于没有有效的地址可以少于两个单词,因此您将从此处开始。以下是范例地址的排列以及验证结果(我通过在地址搜索框的地址栏中输入它smartystreets.com尝试每一个地址:
1234苹果==>失败
1234苹果街==>失败
1234苹果Street纽约==>失败
1234苹果街纽约==>失败
1234苹果街纽约==>宾果,有效地址匹配,无需保留阿婷。
现在,显然这不是一个有效的地址,但你可以用一个真实的地址尝试相同的东西,你会得到相同的结果。显然,这不是从字符串中提取有效地址的最复杂的方法,但它确实可行。而且,由于SmartyStreets允许您为每个查询发送多达100个地址,因此您可以将地址串排列最多99次,并将结果恢复到300ms以下。这不适用于每个地址,因为您一定会发现,但无论地址在文本字符串中的模糊程度如何,它都可以轻松处理大多数地址。
所以,我们从这个开始嘿,我们在纽约纽约10029 Apple Street 1234见面10011在这儿见!并且在不到半秒的时间内想出了这个1234 Apple Street New York,NY 10011-1000。
很酷很棒吧?它甚至听起来非常容易来自非程序员。
让我们尝试将其与真实地址:
嘿,伙计们见我在4219乔恩年轻佛罗里达州的奥兰多32839见!
应用正则表达式,你会得到:
4219乔恩年轻佛罗里达州的奥兰多32839见!
置换,重复,验证:
4219乔恩==>失败
4219乔恩年轻==>失败
4219乔恩年轻奥兰多==>失败
4219乔恩年轻orlando fl ==>宾果,有效的地址匹配。
哇...你是如此的令人难以置信的正确所有的吧!我很高兴这不是我在iOS中错过的东西。我想我必须把它放在backburner上,才能真正成为添加到我的应用程序中的一个很好的功能。再次感谢您的详细解释,当我有其他一切完成时,我会回顾SmartyStreets和其他公司,看看是否有什么兼容。再次非常感谢你让我疯狂! – Wes
我不想*为你的应用增加一个漂亮的功能而让你望而却步 - 它会很棒!只要确保用户确认你的软件所做的任何猜测。我应该做出更清晰的底线。这些技巧希望能够引导您编写能够更好地猜测的软件。 – Matt
是的,我打算这样做,它不会自动提交,但尽量填写邮政编码,国家等。 – Wes