PHP 智能解析地址

26 篇文章 0 订阅
在填写收货人寄件信息时,直接复制,智能解析
public function test(){
        $address = "身份证号:XXXXXXXXXX 收货地址张三收货地址:广东省珠海市xxxxxxxx 100300  136-xxxx-xxxx";
        $address = "广东省珠海市,收货人:XXX;电话:1360XXXXXXX";
        //解析结果
        $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);
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 = Addres
根据您提供的引用内容,我理解您的问题是关于快递地址智能切割补全地址的Vue实现。 对于快递地址智能切割补全地址的实现,可以使用Vue框架结合一些相关的插件或API来完成。其中,常用的插件有element-ui、vue-autocomplete等,可以提供自动补全和地址选择的功能。 在Vue中,可以通过监听输入框的输入事件,将用户输入的地址信息发送给后端进行处理。后端可以使用一些地址解析的API,如高德地图API、百度地图API等,将用户输入的地址进行智能切割和补全。然后,将处理后的地址信息返回给前端,展示给用户选择。 在Vue中,可以使用computed属性或watch监听用户输入的地址信息,并实时更新展示给用户的地址列表。用户可以通过点击列表中的地址项来选择地址,或者继续输入以进一步补全地址。 总结起来,快递地址智能切割补全地址的Vue实现可以通过监听用户输入事件,将地址信息发送给后端进行处理,并将处理后的地址信息返回给前端展示给用户选择。同时,可以使用一些相关的插件或API来提供自动补全和地址选择的功能。 #### 引用[.reference_title] - *1* *2* *3* [PHP面试题(一)](https://blog.csdn.net/qq_35461287/article/details/79675094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值