日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JS寄快遞地址智能解析的實(shí)現(xiàn)代碼

瀏覽:255日期:2024-04-30 13:39:35

去年做了些前端內(nèi)容,最近在整理一些稍微有點(diǎn)用的內(nèi)容,比如智能解析地址,用戶只要輸入:張三1351111111江蘇省揚(yáng)州市廣陵區(qū)XX小區(qū)X樓xxx室,就能解析出姓名、電話、省市區(qū)、地址信息了。是不是很方便?

項(xiàng)目地址暫時(shí)沒(méi)有放,大家可以關(guān)注我的個(gè)人碼云地址https://gitee.com/w9

純JavaScript,無(wú)需Jquery,輕量級(jí)的JS包。可參考以下代碼:

let defaultData = [];const mCity = {};const mArea = {};/** * 處理原始地址數(shù)據(jù)轉(zhuǎn)換成專用數(shù)據(jù) * @param list 原始數(shù)據(jù) * @param init 是否初始化 如傳空 已轉(zhuǎn)換過(guò)不會(huì)再次轉(zhuǎn)換 * @returns {boolean} */function parseArea(list, init) { if (!init && defaultData.length) { return true; } defaultData = list; defaultData.forEach(province => { if (province.city) { province.city.forEach(city => { if (city.name !== ’其他’) { if (!mCity[city.name]) { mCity[city.name] = []; } mCity[city.name].push({ p: province.name, c: city.name, a: city.area || [] }); } if (city.area) { city.area.forEach(area => { if (area !== ’其他’) { if (!mArea[area]) { mArea[area] = []; } mArea[area].push({ p: province.name, c: city.name }) } }) } }) } });}/** * 解析郵編 * @param * @returns <array> */function zipCodeFormat() { let list = [] zipCode.forEach((el) => { if (el.child) { el.child.forEach((event) => { if (event.child) { event.child.forEach(element => { list.push(element.zipcode) }) } }) } }) return list;}//專用數(shù)據(jù)處理let zipCodeList = zipCodeFormat();//郵編parseArea(areaList);//地址/** * 解析 * @param address 任意地址字符串 * @returns {{name: string, mobile: string, detail: string, zip_code: string, phone: string}} */function parse(address) { address = address || ’’; const parse = { name: ’’, mobile: ’’, detail: ’’, zip_code: ’’, phone: ’’ }; //去除空格... address = address.replace(/rn/g, ’ ’).replace(/n/g, ’ ’).replace(/t/g, ’ ’); address = address.replace(/s+/g, ''); //自定義去除關(guān)鍵字,可自行添加 const search = [’地址’, ’收貨地址’, ’收貨人’, ’收件人’, ’收貨’, ’郵編’, ’電話’, ’:’, ’:’, ’;’, ’;’, ’,’, ’,’, ’。’, ]; search.forEach(str => { address = address.replace(new RegExp(str, ’g’), ’ ’) }); //多個(gè)空格replace為一個(gè) address = address.replace(/ {2,}/g, ’ ’); //整理電話格式 address = address.replace(/(d{3})-(d{4})-(d{4})/g, ’$1$2$3’); address = address.replace(/(d{3}) (d{4}) (d{4})/g, ’$1$2$3’); const mobileReg = /(86-[1][0-9]{10})|(86[1][0-9]{10})|([1][0-9]{10})/g; const mobile = mobileReg.exec(address); if (mobile) { parse.mobile = mobile[0]; address = address.replace(mobile[0], ’ ’) } //電話 const phoneReg = /(([0-9]{3,4}-)[0-9]{7,8})|([0-9]{12})|([0-9]{11})|([0-9]{10})|([0-9]{9})|([0-9]{8})|([0-9]{7})/g; const phone = phoneReg.exec(address); if (phone) { parse.phone = phone[0]; address = address.replace(phone[0], ’ ’) } //郵編(加入門(mén)牌號(hào);考慮到重復(fù)郵編問(wèn)題;去除之前簡(jiǎn)單的六位數(shù)字校驗(yàn)) for (let index = 0; index < zipCodeList.length; index++) { if (address.indexOf(zipCodeList[index]) != -1) { let num = address.indexOf(zipCodeList[index]); let code = address.slice(num, num + 6); parse.zip_code = code; address = address.replace(code, ’’) } } /* 廢棄 const zipReg = /([0-9]{6})/g; const zip = zipReg.exec(address); if (zip) { parse.zip_code = zip[0]; address = address.replace(zip[0], ’’) } */ address = address.replace(/ {2,}/, ’ ’); //console.log(address) let detail = detail_parse_forward(address.trim()); if (!detail.city) { detail = detail_parse(address.trim()); if (detail.area && !detail.city) { detail = detail_parse(address.trim(), { ignoreArea: true }); console.log(’smart_parse->ignoreArea(忽略區(qū))’); } else { // console.log(’smart_parse’); } //這個(gè)待完善 const list = address.replace(detail.province, ’’).replace(detail.city, ’’).replace(detail.area, ’’).split(’ ’).filter(str => str); //詳細(xì)住址劃分關(guān)鍵字 //注意:只需要填寫(xiě)關(guān)鍵字最后一位即可:比如單元填寫(xiě)元即可! const address_detail_list = [’室’, ’樓’, ’元’, ’號(hào)’, ’幢’, ’門(mén)’, ’戶’]; if (list.length > 1) { list.forEach(str => { if (!parse.name || str && str.length < parse.name.length) { parse.name = str.trim() } }); if (parse.name) { detail.addr = detail.addr.replace(parse.name, ’’).trim() } } else {//若名字寫(xiě)在詳細(xì)地址后面,根據(jù)address_detail_list進(jìn)行分割; let key = []; address_detail_list.forEach((el) => { key.push(detail.addr.indexOf(el)) }) var max = key.sort(function (a, b) { return b - a; })[0]; if (max != -1) { let addrBuild = detail.addr.slice(0, max + 1); let addrNum = detail.addr.replace(addrBuild, ’’).replace(/[^0-9]+/g, ’’); let userName = detail.addr.replace(addrBuild + addrNum, ’’) detail.addr = addrBuild + addrNum parse.name = userName } } } else { if (detail.name) { parse.name = detail.name } else { const list = detail.addr.split(’ ’).filter(str => str); if (list.length > 1) { parse.name = list[list.length - 1] } if (parse.name) { detail.addr = detail.addr.replace(parse.name, ’’).trim() } } } parse.province = detail.province; parse.city = detail.city; parse.area = detail.area; parse.addr = detail.addr; parse.result = detail.result; return parse;}/** * 正向解析模式 * 從前到后按 province city addr 逐級(jí)篩選 * 有city的值即可說(shuō)明解析成功 * 此模式對(duì)地址順序有要求 * @param address * @returns {{province: string, city: string, area: string, addr: string}} */function detail_parse_forward(address) { const parse = { province: ’’, city: ’’, area: ’’, addr: ’’, name: ’’, }; const provinceKey = [’特別行政區(qū)’, ’古自治區(qū)’, ’維吾爾自治區(qū)’, ’壯族自治區(qū)’, ’回族自治區(qū)’, ’自治區(qū)’, ’省省直轄’, ’省’, ’市’]; const cityKey = [’布依族苗族自治州’, ’苗族侗族自治州’, ’自治州’, ’州’, ’市’, ’縣’]; for (let i in defaultData) { const province = defaultData[i]; let index = address.indexOf(province.name); if (index > -1) { if (index > 0) { //省份不是在第一位,在省份之前的字段識(shí)別為名稱 parse.name = address.substr(0, index).trim(); } parse.province = province.name; address = address.substr(index + province.name.length); for (let k in provinceKey) { if (address.indexOf(provinceKey[k]) === 0) { address = address.substr(provinceKey[k].length); } } for (let j in province.city) { const city = province.city[j]; index = address.indexOf(city.name); if (index > -1 && index < 3) { parse.city = city.name; address = address.substr(index + parse.city.length); for (let k in cityKey) { if (address.indexOf(cityKey[k]) === 0) { address = address.substr(cityKey[k].length); } } if (city.area) { for (let k in city.area) { const area = city.area[k]; index = address.indexOf(area); if (index > -1 && index < 3) { parse.area = area; address = address.substr(index + parse.area.length); break; } } } break; } } parse.addr = address.trim(); break; } } return parse;}/** * 逆向解析 從后【縣,區(qū),旗】往前解析 * 有地區(qū)就能大概返回地址了 * @param address * @param ignoreArea 是否忽視區(qū) 因?yàn)榈刂分泻袇^(qū)容易導(dǎo)致匹配錯(cuò)誤 例:山東省蓬萊市黃海花園東區(qū)西門(mén)寶威學(xué)堂 曲榮聲收15753572456 * @returns {{province: string, city: string, area: string, name: string, _area: string, addr: string}} */function detail_parse(address, { ignoreArea = false} = {}) { const parse = { province: ’’, city: ’’, area: ’’, name: ’’, _area: ’’, addr: ’’, }; let areaIndex = -1, cityIndex = -1; address = address.replace(’ ’, ’ ’); if (!ignoreArea && address.indexOf(’縣’) > -1 || !ignoreArea && address.indexOf(’區(qū)’) > -1 || !ignoreArea && address.indexOf(’旗’) > -1) { if (address.indexOf(’旗’) > -1) { areaIndex = address.indexOf(’旗’); parse.area = address.substr(areaIndex - 1, 2); } if (address.indexOf(’區(qū)’) > -1) { areaIndex = address.indexOf(’區(qū)’); if (address.lastIndexOf(’市’, areaIndex) > -1) { cityIndex = address.lastIndexOf(’市’, areaIndex); parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex); } else { parse.area = address.substr(areaIndex - 2, 3); } } if (address.indexOf(’縣’) > -1) { areaIndex = address.lastIndexOf(’縣’); if (address.lastIndexOf(’市’, areaIndex) > -1) { cityIndex = address.lastIndexOf(’市’, areaIndex); parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex); } else { parse.area = address.substr(areaIndex - 2, 3); } } parse.addr = address.substr(areaIndex + 1); } else { if (address.indexOf(’市’) > -1) { areaIndex = address.indexOf(’市’); parse.area = address.substr(areaIndex - 2, 3); parse.addr = address.substr(areaIndex + 1); } else { parse.addr = address } } if (address.indexOf(’市’) > -1 || address.indexOf(’盟’) > -1 || address.indexOf(’州’) > -1) { if (address.indexOf(’市’) > -1) { parse._area = address.substr(address.indexOf(’市’) - 2, 2); } if (address.indexOf(’盟’) > -1 && !mCity[parse._area]) { parse._area = address.substr(address.indexOf(’盟’) - 2, 2); } if (address.indexOf(’州’) > -1 && !mCity[parse._area]) { parse._area = address.substr(address.indexOf(’州’) - 2, 2); } } parse.area = parse.area.trim(); if (parse.area && mArea[parse.area]) { if (mArea[parse.area].length === 1) { parse.province = mArea[parse.area][0].p; parse.city = mArea[parse.area][0].c } else { parse._area = parse._area.trim(); const addr = address.substr(0, areaIndex); const d = mArea[parse.area].find(item => { return item.p.indexOf(addr) > -1 || item.c === parse._area; }); if (d) { parse.province = d.p; parse.city = d.c } else { parse.result = mArea[parse.area]; } } } else { if (parse._area) { const city = mCity[parse._area]; if (city) { parse.province = city[0].p; parse.city = city[0].c; parse.addr = address.substr(address.indexOf(parse.city) + parse.city.length + 1); parse.area = ’’; for (let i in city[0].a) { if (parse.addr.indexOf(city[0].a[i]) === 0) { parse.area = city[0].a[i]; parse.addr = parse.addr.replace(city[0].a[i], ’’); break; } } } } else { parse.area = ’’; } } parse.addr = parse.addr.trim(); return parse}/*export {parseArea}export default parse;*/

下面介紹部分使用實(shí)例:

Html

<textarea onchange='smart_parse2()' placeholder='[智能填寫(xiě)] 例如:張三1351111111江蘇省揚(yáng)州市廣陵區(qū)XX小區(qū)X樓xxx室' rows='2'></textarea>

JavaScript

//智能識(shí)別地址 function smart_parse2() { var value = $(’.sj_textarea’).val(); console.log(parse(value));//這里可以看一下解析出來(lái)的內(nèi)容 var html = ’’; for (var key in parse(value)) { if (parse(value)[key]) { html += `<p>` + key + `:` + parse(value)[key] + `</p>` } } //把解析的內(nèi)容在賦值到頁(yè)面元素中(這兒業(yè)務(wù)使用的Jq,實(shí)際上不需要) $(’#sj_name’).val(parse(value).name); $(’#sj_phone’).val(parse(value).phone); $(’#city-picker2’).val(parse(value).province + ’ ’ + parse(value).city + ’ ’ + parse(value).area); $(’#sj_addr’).val(parse(value).addr); }

使用起來(lái)非常方便,容錯(cuò)率也高。

到此這篇關(guān)于JS寄快遞地址智能解析的文章就介紹到這了,更多相關(guān)js 寄快遞內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91视频久久| 日本中文字幕一区二区视频| 日韩欧美精品一区| 久久成人一区| 国产日韩欧美在线播放不卡| 在线天堂资源www在线污| 夜夜嗨一区二区三区| 日本aⅴ免费视频一区二区三区| 精品一区二区三区四区五区| 免费av一区| 日本午夜精品| 欧美专区一区| 日本久久成人网| 国产精品毛片| 久久99蜜桃| 99亚洲视频| 国产一区二区三区久久久久久久久| 久久九九精品| 欧美激情在线精品一区二区三区| 欧美二区视频| 国产精品传媒麻豆hd| 国产在线观看www| 99国产精品| 国产成人久久精品麻豆二区| 免费观看久久久4p| 在线天堂中文资源最新版| 蜜臀精品一区二区三区在线观看| 国产福利一区二区三区在线播放| 欧美一区久久久| 亚洲欧洲美洲国产香蕉| 久久uomeier| 日本国产一区| 亚洲国产专区校园欧美| 日韩1区2区日韩1区2区| 久久久91麻豆精品国产一区| 国产一区二区三区日韩精品| 日韩精品欧美大片| 91精品一区二区三区综合在线爱 | 国产精品美女| 狠狠久久伊人| 国产精品最新| 免费精品国产| 福利精品一区| 国产精品密蕾丝视频下载| 日韩精品一二三四| 日韩欧美不卡| 欧美日韩精品一区二区三区视频| 久久久久美女| 国产福利一区二区精品秒拍 | 亚洲精品福利| 色偷偷偷在线视频播放| 日韩成人午夜精品| 蜜臀久久99精品久久久画质超高清| 日韩精品一区二区三区免费观看| 免费在线亚洲欧美| 欧美日韩一区自拍| 一区二区电影在线观看| 久久久久免费av| av日韩中文| 成人日韩av| 欧美黄色精品| 91亚洲精品视频在线观看| 国产精品网在线观看| 日韩av不卡在线观看| 在线观看视频免费一区二区三区| 国产精品精品| 你懂的亚洲视频| 国产区精品区| 欧美日韩 国产精品| 视频精品一区二区| 国产一区导航| 最新亚洲国产| 欧美精选视频一区二区| 伊人久久国产| 久久久久久久久成人| 欧美中文一区| 国产日韩三级| 欧美一级全黄| 日韩成人高清| 久久wwww| 麻豆一区在线| 日韩高清一区二区| 日韩一区二区三区精品| 亚洲精品中文字幕99999| 亚洲毛片视频| 欧美久久久网站| 欧美日韩水蜜桃| 久久久久国产| 日本色综合中文字幕| 99热精品在线| 国产一区二区高清| 久色成人在线| 日韩精品久久理论片| 日本亚州欧洲精品不卡| 一区二区不卡| 日本va欧美va瓶| 丝袜亚洲精品中文字幕一区| 日韩中文字幕高清在线观看| 视频福利一区| 日韩午夜黄色| 日本中文字幕一区二区| 欧美精品二区| 日韩欧美另类一区二区| 国内精品福利| 亚洲1区在线观看| 国产精品九九| 亚洲精品日韩久久| 国产精品男女| 日本欧美国产| 欧美日韩国产免费观看视频| 亚洲一二三区视频| 亚洲tv在线| 精品一区二区三区免费看| 日韩在线中文| 久久av一区二区三区| 日韩av影院| 麻豆精品视频在线| 久久香蕉精品| 电影亚洲精品噜噜在线观看| 在线看片不卡| 久久精品97| 三级小说欧洲区亚洲区| 99在线精品免费视频九九视| 日韩欧美另类中文字幕| 另类综合日韩欧美亚洲| 日韩毛片在线| 青青久久av| 蜜臀久久99精品久久久久久9 | 97精品资源在线观看| 国产一区二区色噜噜| 91精品国产调教在线观看| 日韩美女精品| 日韩综合一区| 婷婷精品在线| 97在线精品| 伊人久久亚洲| 国产精品天天看天天狠| 久久一区二区中文字幕| 日韩视频一二区| 综合日韩av| 欧美精品自拍| 国产一区成人| 国产精品不卡| 国产精品呻吟| 美女av一区| 国产视频欧美| 麻豆精品少妇| 三级一区在线视频先锋| 久久精品av麻豆的观看方式| 日韩va亚洲va欧美va久久| 欧美日韩在线观看视频小说| 亚洲制服欧美另类| 国产精品久久久久久久久久10秀| 先锋亚洲精品| 国产精品毛片久久| 日韩高清在线一区| 久草免费在线视频| 国产a亚洲精品| 精品日韩视频| 日本欧美一区| 精品在线91| av最新在线| 777久久精品| 久久亚洲风情| 日本精品在线中文字幕| 中文字幕亚洲在线观看| 另类综合日韩欧美亚洲| 首页国产欧美久久| 精品国产亚洲一区二区在线观看| 亚洲一区二区三区四区电影| 青青久久av| 久久精品欧洲| 日韩国产在线一| 91久久久精品国产| 亚洲一区二区三区四区电影| 国精品一区二区| 国产成人精品一区二区免费看京 | 国产精品亚洲片在线播放| 欧美在线亚洲| 久久国产欧美| 国产夫妻在线| 日本精品一区二区三区在线观看视频| 久久激情一区| 日韩天堂在线| 国产一区二区精品久| 国产网站在线| 久久青草久久| 视频一区中文字幕精品| 中文av在线全新| 免费在线观看精品| 国产精品精品| 日韩综合一区二区| 卡一精品卡二卡三网站乱码| 狠狠干成人综合网| 麻豆国产91在线播放| 性色一区二区| www.九色在线| 日本成人中文字幕| 亚洲国产福利| 亚洲欧美日韩精品一区二区|