[英]ReactJs prevent e and dot in an input type number
我想阻止e
和.
<input type="number"/>
。 没有 jQuery 或使用step
属性。 我试过pattern="[0-9]"
但它不起作用。
编辑:焦点键盘应该是数字键盘。
'e' 是数字字段中唯一接受的字母,因为它允许使用指数。 您可以使用input type="text"
但它不会像type="number"
那样为您提供浏览器的本机上下箭头。 并且pattern
属性在提交时验证,但不会阻止某人首先输入“e”。 在 REACT 中,您可以使用它来完全阻止输入数字输入中的“e”键:
<input type="number" onKeyDown={ (evt) => evt.key === 'e' && evt.preventDefault() } />
这是我使用的最好的验证。任何不是我们用replace
方法删除的数字的符号。 输入类型必须是文本。 在其他情况下,它可能会意外工作。
const [val, setVal] = useState("");
return (
<div className="App">
<input
type="text"
value={val}
onChange={e => setVal(e.target.value.replace(/[^0-9]/g, ""))}
/>
</div>
);
Codesandbox演示。
如果你不擅长正则表达式,你可以使用第二个变体。
// Outside of function
const exceptThisSymbols = ["e", "E", "+", "-", "."];
//..
return (
<div className="App">
<input
type="number"
onKeyDown={e => exceptThisSymbols.includes(e.key) && e.preventDefault()}
/>
</div>
);
Codesandbox演示。
使用 React,您可以执行以下操作:
class Test extends React.Component {
constructor(){
super();
this.state = {value: ''};
this.onChange = this.onChange.bind(this)
}
onChange(e){
const re = /^[0-9\b]+$/;
if (e.target.value == '' || re.test(e.target.value)) {
this.setState({value: e.target.value})
}
}
render(){
return <input value={this.state.value} onChange={this.onChange}/>
}
}
React.render(<Test />, document.getElementById('container'));
这是一个非常强大的解决方案,可以防止不是数字的字符(“e”、“.”、“+”和“-”)!
import React, { Component } from "react";
class MyComponent extends React.Component {
state = { numInput: "" };
handleChange = (e) => {
this.setState({ [e.target.name]: e.target.value });
}
formatInput = (e) => {
// Prevent characters that are not numbers ("e", ".", "+" & "-") ✨
let checkIfNum;
if (e.key !== undefined) {
// Check if it's a "e", ".", "+" or "-"
checkIfNum = e.key === "e" || e.key === "." || e.key === "+" || e.key === "-" ;
}
else if (e.keyCode !== undefined) {
// Check if it's a "e" (69), "." (190), "+" (187) or "-" (189)
checkIfNum = e.keyCode === 69 || e.keyCode === 190 || e.keyCode === 187 || e.keyCode === 189;
}
return checkIfNum && e.preventDefault();
}
render(){
return (
<input
name="numInput"
value={ this.state.value }
onChange={ this.handleChange }
onKeyDown={ this.formatInput } // this is where the magic happen ✨
/>
}
}
export default MyComponent;
处理此问题的最佳方法是在用户使用键盘输入字符时使用onKeyDown
道具(纯 html 中的 onkeydown)检查 keyCode。 如果事件的 keyCode 是 69(对于 'e')或 190(对于 '.'),那么您可以preventDefault()
,阻止显示输入。
<input
type="number"
onKeyDown={ e => ( e.keyCode === 69 || e.keyCode === 190 ) && e.preventDefault() }
/>
const PhoneInputHandler = (e) => {
let phone=e.target.value;
if(e.nativeEvent.data>=0 && e.nativeEvent.data<=9)
{
setStudentData({...StudentData,phone:phone})
setValidationRules({...validationRules,phone: validatePhone(e.target.value)})
}
}
<div class="px-3 paddedInput mb-2" >
<input class="mb-1 form-control smalltext" type="number" name="phone" value={StudentData.phone}
onChange={(e)=> {PhoneInputHandler(e);}} placeholder="Enter Phone Number" />
<span className="err">{validationRules.phone}</span>
</div>
如果您愿意,这将有助于防止处理箭头和 e,您可以添加其他可能的键[".","+","-"]
。
onKeyDown={(e) =>
["ArrowUp", "ArrowDown", "e", "E"].includes(e.key) && e.preventDefault()
}
您可以通过这种方式简单地使用 onKeyDown:
onKeyDown={event => {
if (event.key == "." || event.key === "-") {
event.preventDefault();
}
}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.