代码如下
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,"");
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。