我有一些我需要处理的会计系统的字符串。会计系统仅提供在一个input
字段中输入邮政编码和城市的选项。稍后会通过xml
导出数据并将其导入php
系统。
我正在寻找一种从城市中提取邮政编码的方法,但是它们有各种格式,因此简单的substr();
无效
我需要处理的值的一些示例是:
1234 ZC ALPHEN AAN DEN RIJN
1234SG UTRECHT
33602 BIELEFELD
W7 3QB LONDON
如何从每个城市拆分邮政编码?我已经联系了会计系统的制造商,他们了解我的问题,并会考虑将未来的电话中的值分成2,但这需要一些时间。
答案 0 :(得分: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" ]
},
...
This页面概述了使用该服务的要求和限制。
请注意,如果数据略有错误,Google API会猜测内容。您1234 ZC
的初始示例不正确,并且API会进行插值以尝试为您提供与您合作的内容。确保您了解API如何对不正确的数据做出反应,并注意不要因为结果而陷入困境。
答案 1 :(得分: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];
虽然您可能可以将某些(多个?)国家/地区的正则表达式组合在一起,但邮政编码的变化很大,您可能仍需要相当长的正则表列表。
每个正则表达式都应该设计为将邮政编码作为第一个子模式返回,将城市作为第二个子模式返回。
此问题的答案中有一些相关信息:What is the ultimate postal code and zip regex?(包括各国邮政编码正则表达式的一些列表)。