PHP 智能解析地址

    技术2022-07-11  86

    在填写收货人寄件人信息的时候,直接复制,智能解析

    直接一个方法搞定

    public function test(){ $address = "身份证号:51250119910927226x 收货地址张三收货地址:成都市武侯区美领馆路11号附2号 617000 136-3333-6666"; $address = "广东省珠海市,收货人:Dove言和;电话:18585859685"; //解析结果 $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); }

     

    Processed: 0.012, SQL: 9