chinese-parseint2
Version:
parse Chinese numeric strings to integer
1 lines • 9.15 kB
Source Map (JSON)
{"version":3,"file":"index.cjs.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":";;;;MACaA,UAAU,gBAAGC,MAAM,CAACC,MAAM,CAAC;AACvC,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AACtC,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAC9C,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AACtD,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AACtD,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AACtC,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AACtB,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAC9B,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAC9B,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAC9B,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAAE,EAAA,GAAG,EAAE,CAAC;AAC9B,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,EAAE;AAClC,EAAA,GAAG,EAAE,GAAG;AAAE,EAAA,GAAG,EAAE,GAAG;AAClB,EAAA,GAAG,EAAE,IAAI;AAAE,EAAA,GAAG,EAAE,IAAI;AACpB,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,EAAE;AAChB,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,EAAE;AAAE,EAAA,GAAG,EAAE,GAAG;AAC1B,EAAA,GAAG,EAAE,IAAI;AAAE,EAAA,GAAG,EAAE,IAAI;AACpB,EAAA,GAAG,EAAE,IAAI;AAAE,EAAA,GAAG,EAAE,IAAI;AACpB,EAAA,GAAG,EAAE,KAAK;AACV,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AAClC,EAAA,GAAG,EAAE,KAAK;AACV,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AACtB,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AACtB,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AACtB,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AACtB,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAK;AAAE,EAAA,GAAG,EAAE,KAAA;AACpB,CAAA;;ACvBJ,SAAUC,WAAW,CAACC,GAAW,EAAA;AAEtC,EAAA,OAAO,QAAQ,CAACC,IAAI,CAACD,GAAG,CAAC,CAAA;AAC1B,CAAA;AAEM,SAAUE,gBAAgB,CAACC,IAAsC,EAAA;AAEtE,EAAA,OAAO,OAAOC,iBAAiB,CAACD,IAAI,CAAC,KAAK,QAAQ,CAAA;AACnD,CAAA;AAEM,SAAUC,iBAAiB,CAACD,IAAsC,EAAA;EAEvE,OAAOP,UAAU,CAACO,IAA+B,CAAC,CAAA;AACnD,CAAA;AAEgB,SAAAE,gBAAgB,CAACL,GAAW,EAAEM,KAAc,EAAA;AAE3D,EAAA,MAAMC,MAAM,GAAGC,QAAQ,CAACR,GAAG,EAAEM,KAAK,CAAC,CAAA;AACnC,EAAA,IAAI,CAACG,KAAK,CAACF,MAAM,CAAC,EAAE,OAAOA,MAAM,CAAA;AACjC,EAAA,IAAI,OAAOP,GAAG,KAAK,QAAQ,EAAE,OAAOU,GAAG,CAAA;EAEvCV,GAAG,GAAGA,GAAG,CAACW,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;EAEhC,OAAOC,oBAAoB,CAACZ,GAAG,CAAC,CAAA;AACjC,CAAA;AAEM,SAAUY,oBAAoB,CAACZ,GAAW,EAAA;AAE/C,EAAA,MAAMa,QAAQ,GAAGd,WAAW,CAACC,GAAG,CAAC,CAAA;EACjC,IAAIa,QAAQ,EAAEb,GAAG,GAAGA,GAAG,CAACc,KAAK,CAAC,CAAC,CAAC,CAAA;AAEhC,EAAA,IAAIC,OAAe,CAAA;EACnB,IAAIR,MAAM,GAAG,CAAC,CAAA;EAId,IAAIS,UAAU,GAAG,CAAC,CAAA;EAIlB,IAAIC,KAAK,GAAG,CAAC,CAAC,CAAA;AAEd,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlB,GAAG,CAACmB,MAAM,EAAE,EAAED,CAAC,EACnC;IACCH,OAAO,GAAGX,iBAAiB,CAACJ,GAAG,CAACoB,MAAM,CAACF,CAAC,CAAC,CAAC,CAAA;AAC1C,IAAA,IAAIH,OAAO,KAAKM,SAAS,EAAE,OAAOX,GAAG,CAAA;IACrC,IAAIK,OAAO,GAAG,EAAE,EAChB;AACCE,MAAAA,KAAK,GAAIA,KAAK,IAAI,CAAC,CAAC,GACjBF,OAAO,GACPE,KAAK,GAAG,EAAE,GAAGF,OAAO,CAAA;AAEvB,KAAA,MACI,IAAIA,OAAO,GAAG,IAAI,EACvB;AACC,MAAA,IAAIE,KAAK,IAAI,CAAC,CAAC,EAAEA,KAAK,GAAG,CAAC,CAAA;MAC1B,IAAIC,CAAC,GAAG,CAAC,IAAID,KAAK,IAAI,CAAC,IAAIb,iBAAiB,CAACJ,GAAG,CAACoB,MAAM,CAACF,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EACtE;AACCD,QAAAA,KAAK,GAAG,CAAC,CAAA;AACT,OAAA;MACDD,UAAU,IAAIC,KAAK,GAAGF,OAAO,CAAA;MAC7BE,KAAK,GAAG,CAAC,CAAC,CAAA;AACV,KAAA,MAED;AACC,MAAA,IAAIA,KAAK,IAAI,CAAC,CAAC,EAAED,UAAU,IAAIC,KAAK,CAAA;AACpC,MAAA,IAAIC,CAAC,IAAId,iBAAiB,CAACJ,GAAG,CAACoB,MAAM,CAACF,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EACrD;QACCX,MAAM,IAAIH,iBAAiB,CAACJ,GAAG,CAACoB,MAAM,CAACF,CAAC,CAAC,CAAC,CAAA;AAC1C,OAAA,MAED;QACCX,MAAM,IAAIS,UAAU,GAAGD,OAAO,CAAA;AAC9B,OAAA;AACDC,MAAAA,UAAU,GAAG,CAAC,CAAA;MACdC,KAAK,GAAG,CAAC,CAAC,CAAA;AACV,KAAA;AACD,GAAA;EACD,IAAIA,KAAK,GAAG,CAAC,EACb;AACC,IAAA,IAAIjB,GAAG,CAACmB,MAAM,GAAG,CAAC,EAClB;AAECJ,MAAAA,OAAO,GAAGX,iBAAiB,CAACJ,GAAG,CAACoB,MAAM,CAACpB,GAAG,CAACmB,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;MACvD,IAAIJ,OAAO,GAAG,GAAG,EACjB;AACCC,QAAAA,UAAU,IAAIC,KAAK,CAAA;AACnB,OAAA,MAED;QACCF,OAAO,IAAIA,OAAO,CAACO,QAAQ,EAAE,CAACF,MAAM,CAAC,CAAC,CAAQ,CAAA;AAC9CJ,QAAAA,UAAU,IAAIC,KAAK,IAAIF,OAAO,GAAG,EAAE,CAAC,CAAA;AACpC,OAAA;AACD,KAAA,MAED;AACCC,MAAAA,UAAU,IAAIC,KAAK,CAAA;AACnB,KAAA;AACD,GAAA;AACDV,EAAAA,MAAM,IAAIS,UAAU,CAAA;AAEpB,EAAA,IAAIH,QAAQ,EAAEN,MAAM,IAAI,CAAC,CAAC,CAAA;AAE1B,EAAA,OAAOA,MAAM,CAAA;AACd;;;;;;;;;;"}