1

我的会计系统中有一些字符串需要处理。input会计系统只提供在一个字段中输入邮政编码和城市的选项。数据随后通过系统导出xml和导入php

我正在寻找一种从城市中提取邮政编码的方法,但是这些有多种格式,所以一个简单substr();的方法是行不通的

我需要处理的值的一些示例是:

1234 ZC ALPHEN AAN DEN RIJN
1234SG UTRECHT
33602 BIELEFELD
W7 3QB LONDON

如何将每个城市的邮政编码分开?我已经联系了会计系统的制造商,他们理解了我的问题,并将考虑将值分成 2 以供将来调用,但这需要一些时间。

4

2 回答 2

2

除非您将这些数据存储在 Google 地图上显示,否则它不符合 Google 的条款和条件,但是利用它们的力量非常诱人,因为它们非常擅长这些东西。

地理编码 API 将能够处理几乎任何地址/邮政编码组合和您可以扔给它的变体——带或不带空格、邮政编码在前或最后等等等,包括不同的地名(“伦敦”、“伦敦” )。

一个请求

http://maps.googleapis.com/maps/api/geocode/json?address=2408%20ZC%20ALPHEN%20AAN%20DEN%20RIJN&sensor=false

返回一个 JSON 流,其中包含:

 "address_components" : [
        {
           "long_name" : "2408 ZB",
           "short_name" : "2408 ZB",
           "types" : [ "postal_code" ]
        },
        {
           "long_name" : "Alphen aan den Rijn",
           "short_name" : "Alphen aan den Rijn",
           "types" : [ "locality", "political" ]
        },
 ...

本页概述了使用该服务的要求和限制。

请注意,如果数据稍有错误,Google API 会猜测。您最初的示例1234 ZC不正确,API 将进行插值以尝试为您提供一些您可以使用的东西。确保您探索 API 如何对不正确的数据做出反应,并注意不要让结果自爆。

于 2013-07-01T14:38:15.233 回答
0

如果您在尝试将邮政编码与城市分开时知道国家/地区,则可以使用它来查找与解析邮政编码的正确方法相对应的正则表达式(或类似的数据)。

例如,您可以将国家/地区映射到数组中的正则表达式(这些正则表达式只是示例——未经严格测试):

$regexMap = array(
    'US' => '(\d{5}|\d{5}-\d{4}|\d{9})\s+(.*)',
    'UK' => '([\d\w]{2,4}\s+\d\w{2})\s+(.*)',
    ...
);

$regularExpression = $regexMap[$country];
preg_match($regularExpression, $incomingPostalCodeAndCity, $postalData);
$postalCode = $postalData[0];
$city = $postalData[1];

虽然您可能可以组合一些(许多?)国家的正则表达式,但邮政编码变化很大,您可能仍然需要相当长的正则表达式列表。

每个正则表达式都应设计为将邮政编码作为第一个子模式返回,将城市作为第二个子模式返回。

这个问题的答案中有一些相关信息:什么是最终的邮政编码和邮编正则表达式?(包括一些国家邮政编码正则表达式列表)。

于 2013-07-01T14:52:16.697 回答