js 大写数字转小写阿拉伯数字

有个语音项目的需求,语音识别结果只能是大写的数字,所以需要转为小写的数字,才能走下去流程。


//计算字符串中大写数字转小写方法
    function cnnumtonum(chnStr){
           var chnNumChar = {
               零:0,一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9
           };
         var chnNameValue = {
                 十:{value:10, secUnit:false},
                 百:{value:100, secUnit:false},
                 千:{value:1000, secUnit:false},
                 万:{value:10000, secUnit:true},
                 亿:{value:100000000, secUnit:true}
         };
        var expNumChar= {十:10,十一:11,十二:12,十三:13,十四:14,十五:15,十六:16,十七:17,十八:18,十九:19  };  
        if(expNumChar[chnStr]) {      return expNumChar[chnStr];  }
        var rtn = 0;
           var section = 0;
           var number = 0;
           var secUnit = false;
           var str = chnStr.split('');
           for(var i = 0; i < str.length; i++){
               var num = chnNumChar[str[i]];
               if(typeof num !== 'undefined'){
                   number = num;
                   if(i === str.length - 1){
                       section += number;
                   }
               }else{
                     var cunit = chnNameValue[str[i]];             
                     if(typeof cunit == 'undefined') {            
                         return false;        
                     }
                    var unit = chnNameValue[str[i]].value;
                       secUnit = chnNameValue[str[i]].secUnit;
                   if(secUnit){
                       section = (section + number) * unit;
                       rtn += section;
                       section = 0;
                   }else{
                       section += (number * unit);
                   }
                   number = 0;
               }
           }
           return rtn + section;
        }
        var chnStr='三万五千六百四十三';
        var aa=cnnumtonum(chnStr);
        console.log(aa);

如果字符串中含有不是大写数字的字符,则加上cnnumtonum方法再加上下面的代码就可以啦

        var chnStr='我选择序号是第三百六十五个';
        var numLength = 0;//中文数字长度
        var curNum ;//当前数字
        for(var i = 0;i<chnStr.length;i++){
            for(var j = 0;j<chnStr.length;j++){
                if(i==j+1){
                    continue;
                }
                var chnStr_rs = chnStr.substring(i,j+1);//截取带有大写数字的字符串
                var curStr_num = cnnumtonum(chnStr_rs);//当前结果
                if(curStr_num){//当前结果是数字
                    if(chnStr_rs.length > numLength){
                        numLength = chnStr_rs.length;
                        curNum = curStr_num;//最终结果赋值
                    }
                }
            }
        }
     console.log('最终结果:'+curNum);

diuren1205
57 声望5 粉丝

I love coding