在填寫收貨人寄件人信息的時候,直接複製,智能解析
直接一個方法搞定
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);
}