chinese-parseint2
Version:
parse Chinese numeric strings to integer
1 lines • 9.16 kB
Source Map (JSON)
{"version":3,"file":"index.umd.development.cjs","sources":["../src/data.ts","../src/index.ts"],"sourcesContent":["\nexport const characters = Object.freeze({\n\t\"0\": 0, \"零\": 0, \"○\": 0, \"〇\": 0, \"洞\": 0,\n\t\"1\": 1, \"一\": 1, \"壹\": 1, \"ㄧ\": 1, \"弌\": 1, \"么\": 1,\n\t\"2\": 2, \"二\": 2, \"貳\": 2, \"贰\": 2, \"弍\": 2, \"兩\": 2, \"两\": 2,\n\t\"3\": 3, \"三\": 3, \"參\": 3, \"叁\": 3, \"弎\": 3, \"参\": 3, \"叄\": 3,\n\t\"4\": 4, \"四\": 4, \"肆\": 4, \"䦉\": 4, \"刀\": 4,\n\t\"5\": 5, \"五\": 5, \"伍\": 5,\n\t\"6\": 6, \"六\": 6, \"陸\": 6, \"陆\": 6,\n\t\"7\": 7, \"七\": 7, \"柒\": 7, \"拐\": 7,\n\t\"8\": 8, \"八\": 8, \"捌\": 8, \"杯\": 8,\n\t\"9\": 9, \"九\": 9, \"玖\": 9, \"勾\": 9,\n\t\"十\": 10, \"拾\": 10, \"什\": 10, \"呀\": 10,\n\t\"百\": 100, \"佰\": 100,\n\t\"千\": 1000, \"仟\": 1000,\n\t\"念\": 20, \"廿\": 20,\n\t\"卅\": 30, \"卌\": 40, \"皕\": 200,\n\t\"萬\": 1e+4, \"万\": 1e+4,\n\t\"億\": 1e+8, \"亿\": 1e+8,\n\t\"兆\": 1e+12,\n\t\"京\": 1e+16, \"經\": 1e+16, \"经\": 1e+16,\n\t\"垓\": 1e+20,\n\t\"秭\": 1e+24, \"杼\": 1e+24,\n\t\"穰\": 1e+28, \"壤\": 1e+28,\n\t\"溝\": 1e+32, \"沟\": 1e+32,\n\t\"澗\": 1e+36, \"涧\": 1e+36,\n\t\"正\": 1e+40, \"載\": 1e+44, \"極\": 1e+48,\n} as const);\n","\nimport { characters } from './data';\nexport { characters } from './data';\n\nexport function _isNegative(str: string)\n{\n\treturn /^[負负-]/.test(str)\n}\n\nexport function isSpecialCharVal(char: string | keyof typeof characters): char is keyof typeof characters\n{\n\treturn typeof getSpecialCharVal(char) === 'number'\n}\n\nexport function getSpecialCharVal(char: string | keyof typeof characters)\n{\n\treturn characters[char as keyof typeof characters]\n}\n\nexport function chinese_parseInt(str: string, radix?: number)\n{\n\tconst result = parseInt(str, radix);\n\tif (!isNaN(result)) return result;\n\tif (typeof str !== \"string\") return NaN;\n\n\tstr = str.replace(/[\\s ]+/g, \"\");\n\n\treturn _chineseParseIntCore(str);\n}\n\nexport function _chineseParseIntCore(str: string)\n{\n\tconst negative = _isNegative(str);\n\tif (negative) str = str.slice(1);\n\n\tlet charVal: number;\n\tlet result = 0;\n\t/**\n\t * 不到一萬的部分\n\t */\n\tlet partialSum = 0; ///< 不到一萬的部分\n\t/**\n\t * 個位數,預設為 -1 以區分有無\"零\"的出現\n\t */\n\tlet digit = -1;\n\n\tfor (let i = 0; i < str.length; ++i)\n\t{\n\t\tcharVal = getSpecialCharVal(str.charAt(i)); ///< 暫存字元代表的數值\n\t\tif (charVal === undefined) return NaN; // 有任何不認得的字,直接 NaN\n\t\tif (charVal < 10)\n\t\t{\n\t\t\tdigit = (digit == -1)\n\t\t\t\t? charVal\n\t\t\t\t: digit * 10 + charVal // ex. 零五、二五六萬\n\t\t\t;\n\t\t}\n\t\telse if (charVal < 1e+4)\n\t\t{\n\t\t\tif (digit == -1) digit = 1;\n\t\t\tif (i > 1 && digit == 0 && getSpecialCharVal(str.charAt(i - 2)) != 100)\n\t\t\t{\n\t\t\t\tdigit = 1;\n\t\t\t} // 處理\"一千零十一\";搜尋\"千零十\"的確是出現過的。\n\t\t\tpartialSum += digit * charVal;\n\t\t\tdigit = -1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (digit != -1) partialSum += digit;\n\t\t\tif (i && getSpecialCharVal(str.charAt(i - 1)) >= 1e+4) // 為了\"四萬萬五千萬\"\n\t\t\t{\n\t\t\t\tresult *= getSpecialCharVal(str.charAt(i));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult += partialSum * charVal;\n\t\t\t}\n\t\t\tpartialSum = 0;\n\t\t\tdigit = -1;\n\t\t}\n\t}\n\tif (digit > 0)\n\t{\n\t\tif (str.length > 1)\n\t\t{\n\t\t\t// 為了處理\"二十四萬二\"、\"二百五\"等\n\t\t\tcharVal = getSpecialCharVal(str.charAt(str.length - 2));\n\t\t\tif (charVal < 100)\n\t\t\t{\n\t\t\t\tpartialSum += digit;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcharVal /= charVal.toString().charAt(0) as any; // 把「皕」轉成100\n\t\t\t\tpartialSum += digit * (charVal / 10);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpartialSum += digit;\n\t\t}\n\t}\n\tresult += partialSum;\n\n\tif (negative) result *= -1;\n\n\treturn result;\n}\n\nexport default chinese_parseInt\n"],"names":["characters","Object","freeze","_isNegative","str","test","isSpecialCharVal","char","getSpecialCharVal","chinese_parseInt","radix","result","parseInt","isNaN","NaN","replace","_chineseParseIntCore","negative","slice","charVal","partialSum","digit","i","length","charAt","undefined","toString"],"mappings":"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"}