chinese-parseint2
Version:
parse Chinese numeric strings to integer
121 lines (114 loc) • 2.27 kB
JavaScript
const e = Object.freeze({
"0": 0,
零: 0,
"○": 0,
〇: 0,
洞: 0,
"1": 1,
一: 1,
壹: 1,
ㄧ: 1,
弌: 1,
么: 1,
"2": 2,
二: 2,
貳: 2,
贰: 2,
弍: 2,
兩: 2,
两: 2,
"3": 3,
三: 3,
參: 3,
叁: 3,
弎: 3,
参: 3,
叄: 3,
"4": 4,
四: 4,
肆: 4,
䦉: 4,
刀: 4,
"5": 5,
五: 5,
伍: 5,
"6": 6,
六: 6,
陸: 6,
陆: 6,
"7": 7,
七: 7,
柒: 7,
拐: 7,
"8": 8,
八: 8,
捌: 8,
杯: 8,
"9": 9,
九: 9,
玖: 9,
勾: 9,
十: 10,
拾: 10,
什: 10,
呀: 10,
百: 100,
佰: 100,
千: 1000,
仟: 1000,
念: 20,
廿: 20,
卅: 30,
卌: 40,
皕: 200,
萬: 1e+4,
万: 1e+4,
億: 1e+8,
亿: 1e+8,
兆: 1e+12,
京: 1e+16,
經: 1e+16,
经: 1e+16,
垓: 1e+20,
秭: 1e+24,
杼: 1e+24,
穰: 1e+28,
壤: 1e+28,
溝: 1e+32,
沟: 1e+32,
澗: 1e+36,
涧: 1e+36,
正: 1e+40,
載: 1e+44,
極: 1e+48
});
function _isNegative(e) {
return /^[負负-]/.test(e);
}
function isSpecialCharVal(e) {
return "number" == typeof getSpecialCharVal(e);
}
function getSpecialCharVal(t) {
return e[t];
}
function chinese_parseInt(e, t) {
const a = parseInt(e, t);
return isNaN(a) ? "string" != typeof e ? NaN : _chineseParseIntCore(e = e.replace(/[\s ]+/g, "")) : a;
}
function _chineseParseIntCore(e) {
const t = _isNegative(e);
let a;
t && (e = e.slice(1));
let r = 0, n = 0, i = -1;
for (let t = 0; t < e.length; ++t) {
if (a = getSpecialCharVal(e.charAt(t)), void 0 === a) return NaN;
a < 10 ? i = -1 == i ? a : 10 * i + a : a < 1e+4 ? (-1 == i && (i = 1), t > 1 && 0 == i && 100 != getSpecialCharVal(e.charAt(t - 2)) && (i = 1),
n += i * a, i = -1) : (-1 != i && (n += i), t && getSpecialCharVal(e.charAt(t - 1)) >= 1e+4 ? r *= getSpecialCharVal(e.charAt(t)) : r += n * a,
n = 0, i = -1);
}
return i > 0 && (e.length > 1 ? (a = getSpecialCharVal(e.charAt(e.length - 2)),
a < 100 ? n += i : (a /= a.toString().charAt(0), n += i * (a / 10))) : n += i),
r += n, t && (r *= -1), r;
}
export { _chineseParseIntCore, _isNegative, e as characters, chinese_parseInt, chinese_parseInt as default, getSpecialCharVal, isSpecialCharVal };
//# sourceMappingURL=index.esm.mjs.map