阿拉伯数字转大写中文

代码以下
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,"");
}
相关文章
相关标签/搜索