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

如何验证/清理阿拉伯数字输入数据?解决输入框无法输入阿拉伯文本问题

问题原因与解决办法

为什么阿拉伯文本被阻止?

你的isNumber()函数通过**字符码(charCode/keyCode)**限制输入,它只允许以下几类字符:

  • ASCII控制字符(字符码≤31,比如退格、回车)
  • ASCII数字0-9(字符码48-57)
  • 小数点(字符码46)

而阿拉伯-Indic数字(٠١٢٣٤٥٦٧٨٩)的Unicode字符码范围是1632到1641,完全不在上述允许范围内。当你输入这些字符时,函数会触发evt.preventDefault(),直接拦截输入行为。

核心限制逻辑如下:

if (
  charCode > 31 &&
  (charCode < 48 || charCode > 57) &&
  charCode !== 46
) {
  evt.preventDefault(); // 不在允许范围内的字符直接被拦截
}

怎么解决?

根据需求,有两种可选方案:

方案1:同时支持ASCII数字与阿拉伯数字

如果需要保留数字输入限制,但兼容阿拉伯数字,修改isNumber()的判断条件,加入阿拉伯数字的字符码范围:

function validateLength(value, maxLength) {
  if (value.length >= maxLength) {
    return false;
  }
  return true;
}
function isNumber(evt, maxLength = 30) {
  const value = evt.target.value;

  if (!validateLength(value, maxLength)) {
    evt.preventDefault();
    return false;
  }
  const charCode = evt.which ? evt.which : evt.keyCode;
  // 新增阿拉伯数字的字符码判断逻辑
  if (
    charCode > 31 &&
    !(
      (charCode >= 48 && charCode <= 57) ||
      (charCode >= 1632 && charCode <= 1641) ||
      charCode === 46
    )
  ) {
    evt.preventDefault();
  } else {
    return true;
  }
}
document.querySelector('input').addEventListener('keypress', isNumber);

方案2:完全移除输入限制

如果不需要限制只能输入数字,直接删掉绑定的keypress事件监听即可,输入框就能正常接受任意阿拉伯文本:

// 移除这行限制代码
// document.querySelector('input').addEventListener('keypress', isNumber);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:05:24