我想防止e和.被输入<input type="number"/>。没有jQuery或使用step属性。我尝试过pattern="[0-9]",但它不起作用。编辑:焦点上的键盘应该是一个数字键盘。
e
.
<input type="number"/>
step
pattern="[0-9]"
fnvucqvd1#
“e”是数字字段中唯一可接受的字母,因为它允许指数。您可以使用input type="text",但它不会像type="number"那样给予浏览器自带的向上和向下箭头。pattern属性在提交时进行验证,但不会阻止用户首先输入“e”。在REACT中,您可以使用此属性完全阻止“e”键防止键入数字输入:
input type="text"
type="number"
pattern
<input type="number" onKeyDown={ (evt) => evt.key === 'e' && evt.preventDefault() } />
pu82cl6c2#
这里是我使用的最好的验证。任何符号,而不是一个数字,我们删除与replace方法。输入类型必须是文本。在其他情况下,它可以意外地工作。
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,你也可以使用第二个变量。
// Outside of function const exceptThisSymbols = ["e", "E", "+", "-", "."]; //.. return ( <div className="App"> <input type="number" onKeyDown={e => exceptThisSymbols.includes(e.key) && e.preventDefault()} /> </div> );
Codesandbox演示。
iqxoj9l93#
使用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'));
Here is fiddle.
blpfk2vs4#
这里有一个非常健壮的解决方案来防止非数字字符(“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;
lyr7nygr5#
处理这个问题的最佳方法是使用onKeyDown prop(在纯html中为onkeydown)在用户使用键盘输入字符时检查keyCode。如果事件的keyCode是69(表示“e”)或190(表示.“”),则可以使用preventDefault(),防止显示输入。
onKeyDown
preventDefault()
<input type="number" onKeyDown={ e => ( e.keyCode === 69 || e.keyCode === 190 ) && e.preventDefault() } />
4zcjmb1e6#
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>
3b6akqbq7#
这将有助于防止处理箭头和e。如果需要,您可以添加其他可能的键,例如[".","+","-"]。举个例子-
[".","+","-"]
onKeyDown={(e) => ["ArrowUp", "ArrowDown", "e", "E"].includes(e.key) && e.preventDefault() }
rjjhvcjd8#
您可以简单地按以下方式使用onKeyDown:
onKeyDown={event => { if (event.key == "." || event.key === "-") { event.preventDefault(); } }}
mi7gmzs69#
试试这个
<input type="text" pattern="\d+" />
查看此处:http://jsfiddle.net/b8NrE/1/
9条答案
按热度按时间fnvucqvd1#
“e”是数字字段中唯一可接受的字母,因为它允许指数。您可以使用
input type="text"
,但它不会像type="number"
那样给予浏览器自带的向上和向下箭头。pattern
属性在提交时进行验证,但不会阻止用户首先输入“e”。在REACT中,您可以使用此属性完全阻止“e”键防止键入数字输入:pu82cl6c2#
这里是我使用的最好的验证。任何符号,而不是一个数字,我们删除与
replace
方法。输入类型必须是文本。在其他情况下,它可以意外地工作。Codesandbox演示。
如果你不擅长使用regexp,你也可以使用第二个变量。
Codesandbox演示。
iqxoj9l93#
使用React,您可以执行以下操作:
Here is fiddle.
blpfk2vs4#
这里有一个非常健壮的解决方案来防止非数字字符(“e”、“."、“+”&“-”)!
lyr7nygr5#
处理这个问题的最佳方法是使用
onKeyDown
prop(在纯html中为onkeydown)在用户使用键盘输入字符时检查keyCode。如果事件的keyCode是69(表示“e”)或190(表示.“”),则可以使用preventDefault()
,防止显示输入。4zcjmb1e6#
3b6akqbq7#
这将有助于防止处理箭头和
e
。如果需要,您可以添加其他可能的键,例如[".","+","-"]
。举个例子-
rjjhvcjd8#
您可以简单地按以下方式使用onKeyDown:
mi7gmzs69#
试试这个
查看此处:http://jsfiddle.net/b8NrE/1/