我希望阻止e
和.
输入<input type="number"/>
。没有jQuery或使用step
属性。
我试过pattern="[0-9]"
,但它没有用。
编辑: 在焦点上,键盘应该是数字键盘。
答案 0 :(得分:2)
使用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'));
答案 1 :(得分:2)
我找不到阻止在e
中输入.
和<input type="number"/>
的解决方案,但如果我们使用<input type="tel"/>
,则在使用时会显示数字键盘移动电话并阻止输入e
和.
。 Here's fiddle
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 type="tel" value={this.state.value} onChange={this.onChange} />
}
}
React.render(<Test/>, document.getElementById('container'));
答案 2 :(得分:1)
“ e”是数字字段中唯一接受的字母,因为它允许使用指数。您可以使用input type="text"
,但不能像type="number"
那样为您提供浏览器的上下箭头。 pattern
属性可在提交时验证,但不会阻止某人首先输入“ e”。在REACT中,您可以使用它来完全阻止'e'键输入数字输入:
<input type="number" onKeyDown={ (evt) => evt.key === 'e' && evt.preventDefault() } />
答案 3 :(得分:1)
这是我使用的最好的验证方法。在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演示。
如果您对regexp不满意,也可以使用第二个变体。
const [symbolsArr] = useState(["e", "E", "+", "-", "."]);
return (
<div className="App">
<input
type="number"
onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}
/>
</div>
);
Codesandbox演示。
答案 4 :(得分:0)
答案 5 :(得分:0)
处理此问题的最佳方法是在用户使用键盘输入字符时,使用onKeyDown
道具(纯HTML中的onkeydown)检查keyCode。如果事件的keyCode是69(对于'e')或190(对于'。'),则可以preventDefault()
,以防止显示输入。
<input
type="number"
onKeyDown={ e => ( e.keyCode === 69 || e.keyCode === 190 ) && e.preventDefault() }
/>
答案 6 :(得分:0)
这是一个非常强大的解决方案,可以防止不是数字的字符(“ 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;
答案 7 :(得分:0)
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>