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

咨询:实现波斯语输入时的千位分隔功能兼容方案

搞定波斯语数字的千位分隔兼容问题

嘿,我明白你的困扰了!你现在的代码只能给拉丁数字加千位分隔,对波斯语数字没反应,核心原因是正则表达式只认0-9这些拉丁数字,完全没考虑波斯语的۰-۹字符。我给你调整一下代码,让它完美兼容波斯语数字:

首先,我们需要两个小工具函数来做波斯语和拉丁数字的互相转换,这样就能复用原来成熟的千位分隔逻辑,避免重新写复杂的正则:

// 把波斯语数字转成拉丁数字
function persianToLatin(numStr) {
  return numStr.replace(/[۰-۹]/g, char => {
    return char.charCodeAt(0) - 1728;
  });
}

// 把拉丁数字转回波斯语数字
function latinToPersian(numStr) {
  return numStr.replace(/[0-9]/g, char => {
    return String.fromCharCode(parseInt(char) + 1728);
  });
}

然后修改原来的输入处理逻辑,先把输入的波斯语数字转成拉丁数字处理分隔,再转回波斯语数字输出:

$('input.number').keyup(function(event) {
  // 跳过方向键,避免干扰光标移动
  if (event.which >= 37 && event.which <= 40) return;
  
  $(this).val(function(index, currentValue) {
    // 第一步:把波斯语数字转成拉丁数字,同时过滤掉所有非数字字符
    const latinNumber = persianToLatin(currentValue).replace(/\D/g, "");
    // 第二步:给拉丁数字添加千位分隔
    const formattedLatin = latinNumber.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    // 第三步:把处理好的数字转回波斯语数字
    return latinToPersian(formattedLatin);
  });
});

HTML部分不用改,还是你原来的那段:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-control number" type="text" value="0" name="subjectvalue" id="txt_subjectvalue">

为什么这么做?

  • 直接复用了原来针对拉丁数字的千位分隔正则,避免了重新编写适配波斯语数字的复杂正则,逻辑更清晰
  • 双向转换确保输入波斯语数字时,输出的也是带分隔符的波斯语数字,符合用户的使用习惯
  • 同时兼容拉丁数字和波斯语数字输入,不管用户用哪种数字都能正常工作

内容的提问来源于stack exchange,提问作者mdehghani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:27:23