You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:52:39