javascript汉字换数字

来源:互联网 发布:英剧 知乎 编辑:程序博客网 时间:2024/06/05 23:48

自己写的一个javascript汉字换数字

var chnNumChar = {

  分:0.01,
  毛:0.1,
  角:0.1,
  零 : 0,
  壹 : 1,
  贰 : 2,
  叁 : 3,
  肆 : 4,
  伍 : 5,
  陆 : 6,
  柒 : 7,
  捌 : 8,
  玖 : 9,
  貮 : 2,
  一:1,
  二:2,
  三:3,
  四:4,
  五:5,
  六:6,
  七:7,
  八:8,
  九:9,
  两:2,
  十 : 10,
  拾 : 10,
  百 : 100,
  佰 : 100,
  千 : 1000,
  仟 : 1000,
  万 : 10000,
  萬 : 10000,
  亿 : 100000000,
  億 : 100000000,
  兆 : 1000000000000
};
function ObjChangeToNumber(obj){
var reg = new RegExp("[\\u4E00-\\u9FFF]+","g");
 var objVal = $(obj).val();
 var afterVal = '';
 var isNumber = false;
 var isChn = false;
 if(parseInt(objVal) == 0 || objVal == null || objVal == 'undefined'){
    return 0;
 }
  if(parseInt(objVal) > 0){
    isNumber = true;
 }
  if(!isNumber){
    //考虑全汉字的格式
    var arr = objVal.split('');
    for(var i = 0; i < arr.length; i++){
    console.log(arr[i]);
        if(reg.test(arr[i])){
            isChn = true;
        }else{
            isChn = false;
            //break;
        }
        console.log(isChn);
    }
  
 }
 if(isNumber){
    afterVal = parseInt(objVal);
 }else if(isChn){
    //①第一判断是否含有[万]的情况
    //②第二中判断是不含有[万]但是含有[千]的情况
    //③第三中判断是不含有[万]不含有[千]含有[百]的情况
    //④第四中判断是不含有[万]不含有[千]不含有[百]含有[十]的情况
    //⑤第四中判断是不含有[万]不含有[千]不含有[百]不含有[十]的情况
    //①实现
    if(objVal.indexOf('万')>-1 || objVal.indexOf('萬')>-1){
        //万前面的数字*10000+万后面的数字
        var len = objVal.indexOf('万')>-1?objVal.indexOf('万'):objVal.indexOf('萬');
        afterVal = changeNumber(objVal.substr(0,len)) * 10000 + changeNumber(objVal.substr(len+1))
    }else{
        afterVal = changeNumber(objVal)
    }
 }
 
 console.log('afterVal===='+afterVal);
 $("#afterChange").val(afterVal);    
}


//这个方法主要用于转换汉字万以内的数字
function changeNumber(str){
    var lenTmp = '';
    var len = '';
    var num = '0';
    var thousand = false;
    var hundred = false;
    var ten = false;
    str = str.replace('零','');
    if(str.indexOf('千')>-1 || str.indexOf('仟')>-1){
        //取得千之前的汉字
        len = str.indexOf('千')>-1?str.indexOf('千'):str.indexOf('仟');
        num = Number(chnNumChar[str.substr(0,1)] * chnNumChar['千']) + Number(num);
        if(str.indexOf('百')>-1 || str.indexOf('佰')>-1){
            len = str.indexOf('百')>-1?str.indexOf('百'):str.indexOf('佰');
            num = Number(chnNumChar[str.substr(len-1,1)] * chnNumChar['百']) + Number(num);
        }
        if(str.indexOf('十')>-1 || str.indexOf('拾')>-1){
            len = str.indexOf('十')>-1?str.indexOf('十'):str.indexOf('拾');
            num = Number(chnNumChar[str.substr(len-1,1)] * chnNumChar['十']) + Number(num);
        }
        if(str.length > len+1){
            num = Number(chnNumChar[str.substr(len+1,1)] * 1) + Number(num);
        }
        thousand = true;
    }
    //如果不是千,那么就从百开始判断
    if( !thousand ){
        if(str.indexOf('百')>-1 || str.indexOf('佰')>-1){
            len = str.indexOf('百')>-1?str.indexOf('百'):str.indexOf('佰');
            num = Number(chnNumChar[str.substr(len-1,1)] * chnNumChar['百']) + Number(num);
            if(str.indexOf('十')>-1 || str.indexOf('拾')>-1){
           len = str.indexOf('十')>-1?str.indexOf('十'):str.indexOf('拾');
           num = Number(chnNumChar[str.substr(len-1,1)] * chnNumChar['十']) + Number(num);
       }
       if(str.length > len+1){
           num = Number(chnNumChar[str.substr(len+1,1)] * 1) + Number(num);
       }
       hundred = true;
        }
    }
    //如果不是百,那么就从十开始判断
    if(!thousand && !hundred){
        if(str.indexOf('十')>-1 || str.indexOf('拾')>-1){
            len = str.indexOf('十')>-1?str.indexOf('十'):str.indexOf('拾');
            if(len==0){
                num = '10';
            }else{
                num = Number(chnNumChar[str.substr(len-1,1)] * chnNumChar['十']) + Number(num);
            }
             if(str.length > len+1){
           num = Number(chnNumChar[str.substr(len+1,1)] * 1) + Number(num);
       }
       ten = true;
        }
    }
    if(!thousand && !hundred && !ten){
        num = (Number(chnNumChar[str]) * 1) + Number(num);
    }
    return num;
}