问题描述
我已将<input type="number" value={value} onChange={onChange}>
添加到表单中,并且正在使用简化的onChange函数来检查输入的格式,如以下组件所示:
export function App() {
const [value,setValue] = useState("");
const onChange = (event) => {
console.log("onChange called",event.target.value);
setValue(event.target.value);
};
return <input type="number" value={value} onChange={onChange} />;
}
我想通过onChange函数中的验证将输入的值限制为整数。
但是,在添加验证之前,我注意到当用户输入有效的非整数数字输入(例如.
,e
或E
)时,输入未传递给onChange函数,因此无法执行验证。
解决方法
e
是数字字段中唯一接受的字母,因为它允许使用指数。您可以使用input type="text"
,但不能像type="number"
那样为您提供浏览器的上下箭头。 pattern
属性可在提交时验证,但不会阻止某人首先输入“ e”。在React中,您可以使用它来完全阻止'e'
键被输入数字输入:
const [symbolsArr] = useState(["e","E","+","-","."]);
return (
<div className="App">
<input
type="number"
onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}
/>
</div>
);