地址内中文数字转为阿拉伯数字

znNumber = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
// 获取字符串内所有中文数字
listZNNumberFromStr(str) {
  if (!str) {
    return [];
  }
  const strArray = str.split('');
  let tempStr = '';
  const numbers = new Array();
  const re = /^[零〇一二三四五六七八九十百千万]+$/;
  strArray.forEach(e => {
    if (re.test(e)) {
      tempStr = tempStr + e;
    } else if (tempStr) {
      numbers.push(tempStr);
      tempStr = '';
    }
  });
  return numbers;
}
// 中文字符串替换为阿拉伯数字
convertAddressToNumber(address) {
  if (MetaLoader.loadConfig('CHINESE_FORMAT_TO_NUMBER') !== true) {
    return;
  }
  const numbers = this.listZNNumberFromStr(address);
  console.log(numbers);
  numbers.forEach(n => {
    let nReplace = n;
    if (n.indexOf('十') > 0 || n.indexOf('百') > 0 || n.indexOf('千') > 0 || n.indexOf('万') > 0) {
      nReplace = this.chineseToNumber(nReplace);
    } else {
        for (let index = 0; index < 10; index++) {
           const reg = new RegExp(this.znNumber[index], 'g');
          nReplace = nReplace.replace(reg, index.toString());
        }
      nReplace = nReplace.replace(new RegExp('零', 'g'), '0');
    }
    address = address.replace(n, nReplace);
  });
  return address;
}
chineseToNumber(chnStr) {
  const chnNumChar: Map<string, number> = new Map();
  chnNumChar.set('零', 0);
  chnNumChar.set('〇', 0);
  chnNumChar.set('一', 1);
  chnNumChar.set('二', 2);
  chnNumChar.set('三', 3);
  chnNumChar.set('四', 4);
  chnNumChar.set('五', 5);
  chnNumChar.set('六', 6);
  chnNumChar.set('七', 7);
  chnNumChar.set('八', 8);
  chnNumChar.set('九', 9);
  let section = 0;
  let number = 0;
  const str = chnStr.split('');
  console.log(str);
  for (let i = 0; i < str.length; i++) {
    const num = chnNumChar.get(str[i]);
    console.log(num);
    if (num >= 0) {
      number = num;
      if (i === str.length - 1) {
        section += number;
      }
    } else {
      let unit = 1;
      if (str[i] === '十') {
        unit = 10;
      } else if (str[i] === '百') {
        unit = 100;
      } else if (str[i] === '千') {
        unit = 1000;
      } else if (str[i] === '万') {
        unit = 10000;
      }
      section += number * unit;
      number = 0;
    }
  }
  return section;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值