PHP 智能解析地址

在填寫收貨人寄件人信息的時候,直接複製,智能解析

直接一個方法搞定

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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章