网站首页 > 基础教程 正文
当您遇到这么一个问题时?您将会怎么做?
因为今天刚好有这个需求,所以寻求解决方案。如果是以前,我肯定追求能用就行,何必吹毛求疵。
搜索引擎
人工智能
使用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('');
人人为我,我为人人,谢谢您的浏览,我们一起加油吧。
猜你喜欢
- 2024-12-14 分享 5 个正则表达式的实际应用场景案例
- 2024-12-14 小心别落入正则回溯陷阱
- 2024-12-14 WAF研发领域,语义分析相对于正则表达式先进性的研究
- 2024-12-14 正则表达式获取body内容
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)