阿拉伯數字轉大寫中文

代碼以下
function getChinese(n){
    // 判斷參數是否爲 0 或 0以上的 一個數字
    if (!/^(0|[1-9]\d*)$/.test(n)) return "這不是一個正確的數字";
    // 參數轉字符串
    n += ""  
    // unit 數字的單位 num數字的大寫漢字 str 存放處理後的字符串
    var unit = "個拾佰仟萬拾佰仟億拾佰仟",num="零壹貳叄肆伍陸柒捌玖",str = "";
    // 判斷數字位數不能超出 unit 的長度
    if(n.length>unit.length) return `不能超過${unit.length}位`
    // n[i]數字的每一項 num的下標對應數字0-9 因此num[n[i]]能夠取到數字對應的大寫漢字
    // 由於數字n是從右到左依次爲 個位、十位... 而 unit 順序正好相反 因此用unit[n.length-1-i]取到對應的單位。
    for (var i=0;i<n.length;i++) str += num[n[i]] + unit[n.length-1-i];
    // $1,$2... 表示 匹配結果中對應分組匹配的結果
    // 若是 n 存在 0 那麼str會出現 零(千|百|拾|個) 這種狀況。因此用下面的方法替換。
    // replace(/零(千|百|拾|個)/g,"零")
    // 若是 n 存在多個 0 我們只須要一個 0 因此用下面方法替換
    // replace(/(零)+/g,"零")
    // 若是 存在 零(萬|億),即萬位、億位爲0,咱們只須要 (萬|億) 
    // replace(/零(萬|億)/g, "$1")
    // 若是 n 包含 10 咱們只須要 拾
    // replace(/壹(拾)/g, "$1$2")
    // 結尾去掉 零|個
    // replace(/(零|個)$/g,"")
    return str.replace(/零(仟|佰|拾|個)/g,"零").replace(/(零)+/g,"零").replace(/零(萬|億)/g, "$1").replace(/(億)萬|壹(拾)/g, "$1$2").replace(/(零|個)$/g,"");
}
相關文章
相關標籤/搜索