传入身份证地址如【‘重庆市大足县榕树街’】得到【重庆市,大足县】榕树街
const { detailAddr, addressString } = handleAddress('重庆市大足县榕树街')//handleAddress(temp.ocr_res.address)
console.log('detailAddr, addressString', detailAddr, addressString)
function handleAddress(address) {
if (!address || typeof address !== 'string') {
return {
detailAddr: '',
addressString: [],
provinceName: '',
cityName: '',
districtName: ''
};
}
try {
// 定义直辖市列表
const directCities = ['北京市', '上海市', '天津市', '重庆市'];
// 定义自治区列表
const autonomousRegions = ['内蒙古自治区', '广西壮族自治区', '西藏自治区', '宁夏回族自治区', '新疆维吾尔自治区'];
let addressParts = [];
let remainAddress = address.trim();
let provinceName = '';
let cityName = '';
let districtName = '';
let detailAddr = '';
// 处理自治区
let isAutonomousRegion = false;
for (const region of autonomousRegions) {
if (remainAddress.startsWith(region)) {
provinceName = region;
addressParts.push(provinceName);
remainAddress = remainAddress.substring(region.length).trim();
isAutonomousRegion = true;
break;
}
}
// 处理普通省份
if (!isAutonomousRegion) {
const provinceMatch = remainAddress.match(/^(.+?(省|特别行政区))/);
if (provinceMatch && provinceMatch[1]) {
provinceName = provinceMatch[1];
addressParts.push(provinceName);
remainAddress = remainAddress.substring(provinceMatch[0].length).trim();
}
}
// 处理直辖市
const isDirectCity = directCities.some(city => remainAddress.startsWith(city));
if (isDirectCity) {
const directCityMatch = remainAddress.match(/(北京市|上海市|天津市|重庆市)/);
if (directCityMatch && directCityMatch[1]) {
provinceName = directCityMatch[1];
cityName = directCityMatch[1];
addressParts.push(cityName);
remainAddress = remainAddress.substring(directCityMatch[0].length).trim();
}
}
// 处理地级市、自治州等
if (!cityName) {
// 先检查自治州
const prefectureMatch = remainAddress.match(/^(.+?(自治州|地区|盟))/);
if (prefectureMatch && prefectureMatch[1]) {
cityName = prefectureMatch[1];
addressParts.push(cityName);
remainAddress = remainAddress.substring(prefectureMatch[0].length).trim();
} else {
// 再检查普通市
const cityMatch = remainAddress.match(/^(.+?(市|自治县|旗))/);
if (cityMatch && cityMatch[1]) {
cityName = cityMatch[1];
addressParts.push(cityName);
remainAddress = remainAddress.substring(cityMatch[0].length).trim();
}
}
}
// 处理区县
const districtMatch = remainAddress.match(/^(.+?(区|县|市|旗|镇|乡|街道|地区))/);
if (districtMatch && districtMatch[1]) {
districtName = districtMatch[1];
addressParts.push(districtName);
remainAddress = remainAddress.substring(districtMatch[0].length).trim();
}
// 剩余部分作为详细地址
detailAddr = remainAddress;
return {
detailAddr,
addressString: addressParts,
provinceName,
cityName,
districtName
};
} catch (error) {
console.error('地址解析错误:', error);
return {
detailAddr: address,
addressString: [],
provinceName: '',
cityName: '',
districtName: ''
};
}
}