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

史潇倩
133 声望12 粉丝