如何在React中强制number类型输入框仅接受正整数
问题原因
你使用的<input type="number" min="0">没有达到预期效果,主要有两点原因:
min属性默认仅在表单提交阶段做校验,不会限制用户实时输入的内容,你依然可以手动输入负号、小数点、科学计数符号e等不符合要求的字符- 你设置的
min="0"包含了0,不符合正自然数的取值要求,需要调整为min="1"
解决方案
最简实现
直接补充step属性和oninput实时校验即可满足需求:
<input type="number" min="1" step="1" oninput="value = value.replace(/[^0-9]/g, '').replace(/^0+/, '')" >
逻辑说明:
min="1"和step="1"限制输入框自带的上下调整箭头只能选择正整数oninput事件里的正则会自动过滤所有非数字字符,同时去掉开头多余的0,避免出现0开头的无效数值
兼容粘贴场景的实现
如果需要限制用户粘贴不符合要求的内容,可以补充onpaste事件处理:
<input type="number" min="1" step="1" oninput="value = value.replace(/[^0-9]/g, '').replace(/^0+/, '')" onpaste="event.preventDefault(); let pasteContent = (event.clipboardData || window.clipboardData).getData('text'); value = pasteContent.replace(/[^0-9]/g, '').replace(/^0+/, '')" >
如果是在Vue、React等框架中使用,把上述事件逻辑写到框架对应的事件监听函数中即可,不需要写内联事件。
注意:前端校验仅做用户输入体验优化,后端接收数据时必须再加一层数值合法性校验,避免恶意提交不符合要求的内容。
内容的提问来源于stack exchange,提问作者Adebayo Damilare
相关产品推荐
相关产品推荐

