我有一些来自我们的会计系统的字符串需要处理。会计系统只提供在一个input字段中输入邮政编码和城市的选项。数据稍后通过xml导出,并导入到php系统中。
我正在寻找一种方法来提取邮政编码从城市,但这些来在各种格式,所以一个简单的substr();不工作
我需要处理的值的一些示例如下:
1234 ZC ALPHEN AAN DEN RIJN
1234SG UTRECHT
33602 BIELEFELD
W7 3QB LONDON如何将每个城市的邮政编码分开?我已经联系了会计系统的制造商,他们理解我的问题,并将在以后的呼叫中考虑将值拆分为2,但这将需要一些时间。
发布于 2013-07-01 22:38:15
这不符合谷歌的条款和条件,除非你将这些数据存储在谷歌地图上,但利用他们的力量是非常诱人的,因为他们在这方面太擅长了。
地理编码API将能够处理几乎任何地址/邮政编码组合和变化-有或没有空格,邮政编码首尾等等,包括不同的地名(“伦敦”,"Londres")。
一项请求
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对错误数据的反应,小心不要拿结果搬起石头砸自己的脚。
发布于 2013-07-01 22:52:17
如果您在尝试将邮政编码从城市中分离出来时知道国家/地区,则可以使用该邮政编码查找对应于解析邮政编码的正确方法的正则表达式(或类似的数据)。
例如,您可以将国家映射到数组中的正则表达式(这些正则表达式只是示例--没有经过严格测试):
$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? (包括一些不同国家的邮政编码正则表达式的列表)。
https://stackoverflow.com/questions/17406959
复制相似问题