如何禁止number类型输入框接收印地语字符与数字?
解决Number输入框禁止印地语字符及数字输入的问题
你的问题核心在于现有代码只限制了英文数字[0-9],但印地语数字(如१对应Unicode U+096F-U+0979)和印地语字符(U+0900-U+097F)不在这个匹配范围内,同时原代码对编辑控制键的支持也不完整,还没考虑到粘贴这类非键盘输入场景。下面是完整的解决方案:
1. 改进键盘事件处理函数
替换原有的numberOnly函数,改用evt.key直接获取输入字符(比charCode更可靠,尤其是处理Unicode字符时),同时开放必要的编辑控制键:
function numberOnly(evt) { // 允许常用编辑控制键,保证用户能正常修改输入内容 const allowedControlKeys = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Enter', 'Tab']; if (allowedControlKeys.includes(evt.key)) { return true; } // 严格只允许英文数字0-9 const numberRegex = /^[0-9]$/; return numberRegex.test(evt.key); }
2. 添加输入监听,处理粘贴等非键盘操作
仅靠键盘事件无法阻止用户通过粘贴(右键粘贴、Ctrl+V)输入印地语内容,所以需要监听input事件,自动清除所有非英文数字的字符:
// 页面加载完成后绑定事件 window.addEventListener('load', function() { const wardInput = document.getElementById('txtWard'); wardInput.addEventListener('input', function() { // 替换所有非0-9的字符为空 this.value = this.value.replace(/[^0-9]/g, ''); }); });
3. 保留原HTML结构
你的HTML代码可以保持不变,onkeypress事件继续绑定修改后的函数即可:
<input type="number" id="txtWard" onkeypress="return numberOnly(event)" required="required" runat="server" min="0" max="8" />
方案说明
- 印地语数字和字符都不属于
[0-9]范围,键盘输入会被直接拦截。 input事件监听覆盖了所有输入场景(包括粘贴、拖拽输入),确保输入框内始终只有英文数字。- 开放必要的控制键,不会影响用户正常的编辑操作(比如删除、移动光标)。
内容的提问来源于stack exchange,提问作者user4221591
相关产品推荐
相关产品推荐

