如何验证/清理阿拉伯数字输入数据?解决输入框无法输入阿拉伯文本问题
问题原因与解决办法
为什么阿拉伯文本被阻止?
你的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
相关产品推荐
相关产品推荐

