如何在JavaScript中将阿拉伯数字字符串转换为英文数字?
解决波斯数字转英文数字的问题
你的问题出在正则表达式的匹配范围上!原来的/\d/g只能匹配ASCII码里的英文数字(0-9,U+0030到U+0039),而波斯数字是Unicode专属字符(۰-۹,U+06F0到U+06F9),所以这个正则根本找不到要替换的内容,自然输出还是原来的波斯数字。
下面给你两种可行的实现方式:
方法一:字符索引映射法
这种方法和你实现e2p的思路完全对应,先定义波斯数字的字符序列,找到每个波斯数字在序列中的位置,再对应到英文数字的序列中:
const persianDigits = '۰۱۲۳۴۵۶۷۸۹'; const englishDigits = '0123456789'; const p2e = (str) => { return str.replace(/[۰-۹]/g, (digit) => { const index = persianDigits.indexOf(digit); return englishDigits[index]; }); }; console.log(p2e('۲۱۱')); // 输出:211
这里的正则/[۰-۹]/g专门匹配所有波斯数字,确保每个目标字符都能被捕获并替换。
方法二:Unicode编码差值法
波斯数字和英文数字的Unicode编码有固定差值:波斯数字۰的编码是1776,英文数字0是48,两者差值为1728。每个波斯数字的编码减去这个差值,就能得到对应英文数字的编码:
const p2e = (str) => { return str.replace(/[۰-۹]/g, (digit) => { return String.fromCharCode(digit.charCodeAt(0) - 1728); }); }; console.log(p2e('۲۱۱')); // 输出:211
这种方法不需要额外定义字符序列,直接通过编码计算完成转换,效率也很高。
两种方法都能完美解决你的问题,你可以根据自己的习惯选择使用~
内容的提问来源于stack exchange,提问作者Mehdi Faraji
相关产品推荐
相关产品推荐

