ReactJs 阻止输入类型编号中的 e 和点



我想防止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>
);

代码沙盒演示。

如果你不擅长正则表达式,你可以使用第二个变体。

// Outside of function
const exceptThisSymbols = ["e", "E", "+", "-", "."];
//..
return (
<div className="App">
<input
type="number"
onKeyDown={e => exceptThisSymbols.includes(e.key) && e.preventDefault()}
/>
</div>
);

代码沙盒演示。

使用 React,你可以做如下的事情:

class Test extends React.Component {
constructor(){
super();
this.state = {value: ''};
this.onChange = this.onChange.bind(this)
}
onChange(e){
const re = /^[0-9b]+$/;
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;

处理此问题的最佳方法是在用户使用键盘输入字符时使用onKeyDownprop(纯 html 中的 onkeydown(检查 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();
}
}}

试试这个

<input type="text" pattern="d+" />

在这里查看:http://jsfiddle.net/b8NrE/1/

最新更新