1.前言
做电商这块的收发货地址处理,会遇到一个城市信息的提取问题。提取的方式有很多,下面我来介绍下最简单的正则提取。
2.代码实现
<?php
declare(strict_types=1);
$a = '四川省成都市都江堰市XX1路';
$b = '长沙市天心区解放路一单元110号';
$c = '长沙市岳麓区中南大学校本部五舍11号';
$d = '上海市浦东新区花园石桥路28弄1-8号';
$e = 'sdf';
$f = '上海市';
function parseCity($address)
{
$result = [];
$whiteProvince = ['香港行政区', '澳门行政区', '上海市', '北京市', '重庆市', '天津市'];
if (preg_match_all('/(.*?(省|行政区|自治区|市|区|县))/', $address, $matches)) {
list($province, $city, $district) = $matches[0];
switch (count($matches)) {
case 3:
if (in_array($matches[0][0], $whiteProvince)) {
$district = $city;
}
$result = [$province, $city, $district];
break;
default:
return $result;
}
}
if (preg_match_all('/(.*(区|县|市))(.*)/', $address, $matches)) {
$result[] = $matches[count($matches) - 1][0];
}
return $result;
}
function batchParseCity($addresses)
{
$result = [];
foreach ($addresses as $address) {
$result[] = parseCity($address);
}
return $result;
}
var_dump(batchParseCity([$a, $b, $c, $d, $e, $f]));
3.效果

4.缺陷
数据是可以正常提取,但是,如果你需要验证合法性,需要和现有的城市数据集做一个验证。验证的方式可以根据某一个级别的行政区域查询它的父级和子级行政区是否满足条件。
如无特殊说明,文章均为本站原创,转载请注明出处。如发现有什么不对的地方,希望得到您的指点。