功能需求:用户输入混合的收货地址,能智能识别出地址,手机,姓名
- 能正常识别包含三级其中一项的地址,直白点说就是只包含第三级地区一样能识别出来
- 代码不完成免费共享了,转为收费(删除部分代码),生活所迫!哈哈……
效果图:
代码:
<?php
class DistinguishAddress {
/**
* 类的入口方法
* 传入地址信息自动识别,并返回最高匹配结果
* 如果地址新增,则需要删除缓存文件重新缓存
* @param $address
*/
function getAddressResult($address){
// 优先第一种方法
$result = $this->getAddressArrar($address);
// 如果结果不理想,再模糊去匹配
if($result['level'] != 3){
$result_sub = $this->addressVague($address);
// 只有全匹配对才替换,否则不做任何改变
if($result_sub['level'] == 3){
$result = $result_sub;
}
}
// 联系方式-优先匹配电话
if(preg_match('/1\d{10}/', $address, $mobiles)){ // 手机
$result['mobile'] = $mobiles[0];
} else if(preg_match('/(\d{3,4}-)?\d{7,8}/', $address, $mobiles)){ // 固定电话
$result['mobile'] = $mobiles[0];
}
// 识别姓名-必须空格分享的--概率
preg_match_all('/[\x{4e00}-\x{9fa5}]{2,}/iu', $address,$names);
if($names){
$name_where = '';
foreach ($names[0] as $name){
// 必须是大于1个字符且小于5个字符的
if(1 < mb_strlen($name,'utf-8') && mb_strlen($name, 'utf-8') < 5){
$sub_name = mb_substr($name, 0, 1, 'utf-8');