字符串拆分姓名、電話、省市區邏輯


字符串拆分姓名、電話、省市區邏輯

最新開發需要把一段文字拆分;自己寫了一個例子;有需要的看看,下面是一部分邏輯說明和部分代碼;需要的可以留下評論,代碼只是大部分,發現有問題的,請評論,謝謝

把特殊字符+換行+回車等字符置空

一、 用戶可能輸入順序組合

① 張三18300000000廣東省廣州市天河區林和中路

② 張三廣東省廣州市天河區林和中路路18300000000

③ 18300000000張三廣東省廣州市天河區林和中路

④ 18300000000廣東省廣州市天河區林和中路號張三

⑤ 廣東省廣州市天河區林和中路路18300000000張三

⑥ 廣東省廣州市天河區林和中路路張三18300000000

⑦ 省市區輸入:

廣東省廣州市天河區林和中路

廣東廣州天河林和中路

廣州市天河區林和中路

廣州天河林和中路

 

二、針對以上結果按正則截取手機或固話;處理后的組合

① 姓名+省市區+詳細地址

② 省市區+詳細地址+姓名

省市區數據拆分

1、有省份:

(姓名)省+++詳細地址(姓名)

(姓名)省++詳細地址(姓名)

2、無省份,往上查找省份

        (姓名)市++詳細地址(姓名)

        (姓名)市+詳細地址(姓名)

三、 姓名拆分

① 省市區前面有數據:截取省份前面的數據填充到姓名

② 姓名在詳細地址后面:從倒數第一個字開始匹配百家姓數據,在第二或小於20 位找到姓氏; 截取名字,剩下的為詳細地址

 

 // 檢索省市區
    addrMatch (str) {
      let proviceArray
      let cityArray
      let countyArray
      let provice = ''
      let city = ''
      let county = ''
      let proviceCode = ''
      let cityCode = ''
      let countyCode = ''
      let address = '' 
      let nametem='' 
      let addresstemp=''
      let nameStr=''
      proviceArray = this.addressInfo
      for (let i = 0; i < proviceArray.length; i++) {
        if (str.indexOf(proviceArray[i].name.substring(0, 2)) > -1) { // 檢索到省
          provice = proviceArray[i].name
          proviceCode = proviceArray[i].id
          nametem = str.substring(0,str.indexOf(proviceArray[i].name.substring(0, 2)))  // 獲取省前的字符判斷  不用 lastIndexOf 防止 有這樣名字 張廣東廣東省
          cityArray = proviceArray[i].child
          for (let j = 0; j < cityArray.length; j++) {
            if (str.indexOf(cityArray[j].name.substring(0, 2)) > -1) {
              city = cityArray[j].name
              cityCode = cityArray[j].id
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) { //有區級編碼
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    // break 
                  }
                }
              }else{
                addresstemp = str.substring(str.indexOf(city) + city.length, str.length)
              }
            } else {
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) {
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    if (city == '') {
                      city = cityArray[j].name
                      cityCode = cityArray[j].id
                    }
                    // break 
                  }
                }
              }
            }
          }
          break;
        } else { // 沒有檢索到省
          cityArray = proviceArray[i].child
          for (let j = 0; j < cityArray.length; j++) {
            if (str.indexOf(cityArray[j].name.substring(0, 2)) > -1) {
              city = cityArray[j].name
              cityCode = cityArray[j].id
              provice = proviceArray[i].name
              proviceCode = proviceArray[i].id
              nametem = str.substring(0,str.lastIndexOf(cityArray[j].name.substring(0, 2)))  // 獲取省前的字符判斷
              console.log(nametem)
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) {
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    break 
                  }
                }
              }else{
                addresstemp = str.substring(str.indexOf(city) + city.length, str.length)
              }
            }
          }
        }
      }
      if(!nametem){     //nametem 字符串在名字前的字段 ,如果有值,則認為是名字
        var surname = "趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻柏水竇章雲蘇潘葛奚范彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯 滕殷羅畢郝鄔安常樂於時傅皮卞齊康伍余元卜顧孟平黃和穆蕭尹姚邵堪汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董粱杜阮藍閔席季麻強賈路婁危江童顏郭 梅盛林刁鍾徐邱駱高夏蔡田樊胡凌霍虞萬支柯咎管盧莫經房裘繆干解應宗宣丁賁鄧郁單杭洪包諸左石崔吉鈕龔程嵇邢滑裴陸榮翁荀羊於惠甄魏加封芮羿儲靳汲邴糜松 井段富巫烏焦巴弓牧隗山谷車侯宓蓬全郗班仰秋仲伊宮寧仇欒暴甘鈄厲戎祖武符劉姜詹束龍葉幸司韶郜黎薊薄印宿白懷蒲台從鄂索咸籍賴卓藺屠蒙池喬陰郁胥能蒼雙 聞莘黨翟譚貢勞逄姬申扶堵冉宰酈雍郤璩桑桂濮牛壽通邊扈燕冀郟浦尚農溫別庄晏柴瞿閻充慕連茹習宦艾魚容向古易慎戈廖庚終暨居衡步都耿滿弘匡國文寇廣祿闕東覃 毆殳沃利蔚越夔隆師鞏厙聶晁勾敖融冷訾辛闞那簡饒空曾毋沙乜養鞠須豐巢關蒯相查后江紅游竺權逯蓋益桓公萬俟司馬上官歐陽夏侯諸葛聞人東方赫連皇甫尉遲公羊 澹台公冶宗政濮陽淳於仲孫太叔申屠公孫樂正軒轅令狐鍾離閭丘長孫慕容鮮於宇文司徒司空亓官司寇仉督子車顓孫端木巫馬公西漆雕樂正壤駟公良拓拔夾谷宰父谷粱 晉楚閆法汝鄢塗欽段干百里東郭南門呼延媯海羊舌微生岳帥緱亢況後有琴梁丘左丘東門西門商牟佘佴伯賞南宮墨哈譙笪年愛陽佟第五言福"
        let na=''
        var strArray = surname.split("");
                    for(var i=addresstemp.length-1;i > 0;i--){
                        if(strArray.indexOf(addresstemp[i]) != -1){
              na = addresstemp.substring(i);
              if(na){
                 if(na.length>=2 && na.length<=20){
                   nameStr=na
                   address=addresstemp.substring(0,i);
                   break // 找到當前值;退出循環
                 }
              } 
          }
        }
      }else{
        nameStr=nametem
        address=addresstemp
      }
      console.log(provice);
      console.log(city);
      console.log(county);
      console.log(proviceCode);
      console.log(countyCode);
      console.log(address);
      console.log(nameStr);
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM