代碼以下
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,""); }