专业编程基础技术教程

网站首页 > 基础教程 正文

正则表达式:汉字与阿拉伯数字间的转换技巧,让亿万数字变得轻松

ccvgpt 2024-12-14 10:21:36 基础教程 7 ℃

当您遇到这么一个问题时?您将会怎么做?

因为今天刚好有这个需求,所以寻求解决方案。如果是以前,我肯定追求能用就行,何必吹毛求疵。

正则表达式:汉字与阿拉伯数字间的转换技巧,让亿万数字变得轻松


搜索引擎

人工智能

使用js实现汉字转阿拉伯数字

还有更好的方法吗

当数字很大的时候,上面的例子就有问题了

结果也未能解决这个问题,此时可能有朋友要问,你的数字得有多大啊?

九千九百零五万亿九千九百九十九亿九千九百九十九万九千零一十二

你这是钢筋吧!!!

当然,也不全是数字大的问题,还是10到19的问题、连续零的问题、结尾的问题等等。

手动实现

思考……

思路1:我们首先找出比较大的单位,然后无限向小单位递归,是不是可以?

const regs = [
    /^.*亿/,
    /^.*万/,
    /^.*千/,
    /^.*百/,
    // ...
];

想着的时候就直接放弃了,因为会觉得很复杂……。

等等,我好像发现了什么?

思路2:我直接把单位删除,把对应的文字转成数字不就可以了?good idea...。在测试的时候,发现了连续零这个坑……,结尾坑……,10到19的坑……,然后又尝试其他思路,结果就是一团糟。那么我们干脆遵从一个新的理论,解决问题的办法就是……。

const reg = /([零]|[一二三四五六七八九]+)/g;
const dic = {
  零: 0,
  一: 1,
  二: 2,
  三: 3,
  四: 4,
  五: 5,
  六: 6,
  七: 7,
  八: 8,
  九: 9,
  十: "0",
  百: "00",
  千: "000",
  万: "0000",
  亿: "00000000",
};

// 处理10-19的问题
if (/^十/.test(content)) {
  content = "一" + content;
}
// 处理连续零的问题
content = geZero(content);
// 处理单位直接结尾
content = content.replace(/[十百千万亿]$/, (str) => {
  return str + dic[str].replace(/0/g, "零");
});
// 开始替换数字
const keys = Array.from(content.match(reg) || []);
const res = keys.map((key) => dic[key]).join('');


人人为我,我为人人,谢谢您的浏览,我们一起加油吧。

最近发表
标签列表