PHP智能解析收货地址

有问题,可以加⼊讨论 QQ:825042078
这段代码可以实现剥离出:⾝份证号,⼿机号,座机号,右边,同时出去字符⾥⾯的⼀些⼲扰词,只留下⽤于解析的详细地址然后详细地址可以,通过第⼆段程序,分离出,省+市+区+ 街道地址
<?php
/**
* 此过程不需要查询数据库,是纯PHP
*/
class Address
{
/**
* 地址智能解析
* @param string 包含丰富信息的字符串
* @return array 姓名,⼿机号,邮编,详细地址
*/
public static function smart_parse($address)
{
//解析结果
$parse = [];
$parse['name']    = '';
$parse['mobile']  = '';
$parse['postcode'] = '';
$parse['idno']    = '';
短址
$parse['detail']  = '';
//1. 过滤掉收货地址中的常⽤说明字符,排除⼲扰词
$search = ['收货地址', '地址', '收货⼈', '收件⼈', '收货', '邮编', '电话', '⾝份证号码', '⾝份证号', '⾝份证', ':', ':', ';', ';', ',', ',', '。', ];
$replace = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '];
$address = str_replace($search, $replace, $address);
//2. 连续2个或多个空格替换成⼀个空格
$address = preg_replace('/ {2,}/', ' ', $address);
//3. 去除⼿机号码中的短横线如136-3333-6666 主要针对苹果⼿机
$address = preg_replace('/(\d{3})-(\d{4})-(\d{4})/', '$1$2$3', $address);
//4. 提取中国境内⾝份证号码
preg_match('/\d{18}|\d{17}X/i', $address, $match);
if ($match && $match[0]) {
$parse['idno'] = strtoupper($match[0]);
$address = str_replace($match[0], '', $address);
}
//5. 提取11位⼿机号码或者7位以上座机号
preg_match('/\d{7,11}|\d{3,4}-\d{6,8}/', $address, $match);
if ($match && $match[0]) {
$parse['mobile'] = $match[0];
$address = str_replace($match[0], '', $address);
}
//6. 提取6位邮编邮编也可⽤后⾯解析出的省市区地址从数据库匹配出
preg_match('/\d{6}/', $address, $match);
if ($match && $match[0]) {
$parse['postcode'] = $match[0];
$address = str_replace($match[0], '', $address);
}
//再次把2个及其以上的空格合并成⼀个,并⾸位TRIM
$address = trim(preg_replace('/ {2,}/', ' ', $address));
//按照空格切分长度长的为地址短的为姓名因为不是基于⾃然语⾔分析,所以采取统计学上⾼概率的⽅案
$split_arr = explode(' ', $address);
if (count($split_arr) > 1) {
$parse['name'] = $split_arr[0];
foreach ($split_arr as $value) {
if (strlen($value) < strlen($parse['name'])) {
$parse['name'] = $value;
}
}
$address = trim(str_replace($parse['name'], '', $address));
}
$parse['detail'] = $address;
//parse['detail']详细地址可以传⼊另⼀个⽂件的函数,⽤来解析出:省,市,区,街道地址
var_dump($parse);
}
}
$obj = Address::smart_parse('⾝份证号:512501************ 收货地址张三收货地址:成都市武侯区美领馆路11号附2号 617000  136-3333-6666 ');
//上⾯例⼦会解析出结果:
array(5) {
["name"]=>
string(6) "张三"
["mobile"]=>
string(11) "136********"
["postcode"]=>
string(6) "617000"
["idno"]=>
string(18) "512501************"
["detail"]=>
string(33) "成都市武侯区美领馆路11号附2号"
}
分离省市区和街道地址的代码如下
因为分离过过程中需要,跟中国现在⾏政区的地址⽐较,所以会有⼀个记录全国省市区的数据库
有问题,可以加⼊讨论 QQ:825042078

本文发布于:2024-09-22 22:33:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/355256.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:地址   解析   收货   省市区   邮编   采取   字符
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议