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