@writ/utils
Version:
My tool kit
31 lines (26 loc) • 1.24 kB
JavaScript
;
/**
* 将中文数字转为阿拉伯数字
* leftOnly 和 rightLimit 分别为正则限定字符,防止“千山万水”被替换为“1000山10000水”
* @param {[String]} str [要替换的字符]
* @param {[String]} leftOnly [左侧限定字符]
* @param {[String]} rightLimit [右侧限定字符]
* @return {[String]} [返回替换后的字符]
* @example
* cnn2arab("第一千零叁十五章 千山万水","第","章") // “第1035章 千山万水”
*/
function cnn2arab(str, leftOnly, rightLimit) {
const cnn = '〇一二三四五六七八九十百千万亿零壹贰叁肆伍陆柒捌玖拾佰仟萬億';
const arab = ['+0', '+1', '+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9', '0', '00', '000', '0000', '00000000'];
leftOnly = leftOnly || '';
rightLimit = rightLimit || '';
return str.replace(new RegExp(leftOnly + '([' + cnn + ']+)' + rightLimit, 'g'), function (a, b) {
let tmpstr = '';
for (const i in b) {
tmpstr += arab[cnn.indexOf(b[i]) % 15];
}
// 修复十三或一千零十三的错误
return leftOnly + eval(tmpstr.replace(/(^0|\+00)/g, '+10')) + rightLimit;
});
}
module.exports = cnn2arab;