Javascript 如何防止用户在react中输入负数?
我想限制用户输入负值。我正在使用min=“0”。有了这个,我可以限制用户递减到0,也就是说,用户只能将值递减到0。但他们可以键入“-”。如何防止在反应jsJavascript 如何防止用户在react中输入负数?,javascript,reactjs,web,ecmascript-6,frontend,Javascript,Reactjs,Web,Ecmascript 6,Frontend,我想限制用户输入负值。我正在使用min=“0”。有了这个,我可以限制用户递减到0,也就是说,用户只能将值递减到0。但他们可以键入“-”。如何防止在反应js 在设置输入状态之前,您可以使用正则表达式验证输入,并将输入值与状态值同步 <input type="number" onChange={this.handleChange} className="w-100&
在设置输入状态之前,您可以使用正则表达式验证输入,并将输入值与状态值同步
<input
type="number"
onChange={this.handleChange}
className="w-100"
value= {this.state.inputVal}
/>
validateNumber = (value) => {
//true for digits only.
const regex = /^[0-9]+$/
return regex.test(value);
}
handleChange = ({target}) => {
const {name,value} = target;
const {inputVal} = this.state;
if(value === '') {
return this.setState({inputVal:''});
}
if(this.validateNumber(value)) {
this.setState({inputVal:value})
} else {
this.setState({inputVal:inputVal})
}
}
ValidateEnumber=(值)=>{
//仅适用于数字。
常量正则表达式=/^[0-9]+$/
返回正则表达式测试(值);
}
handleChange=({target})=>{
常量{name,value}=target;
const{inputVal}=this.state;
如果(值==''){
返回此.setState({inputVal:''});
}
if(此.validateEnumber(值)){
this.setState({inputVal:value})
}否则{
this.setState({inputVal:inputVal})
}
}
使用一些本地组件状态来保存输入值,并使用Math.max(0,value)
确保值
属性/属性为非负值。输入的值将是onChange
处理程序中的一个字符串,因此请记住将其强制回状态的数字值
函数应用程序(){
const[value,setValue]=React.useState(0);
返回(
尝试输入负值
setValue(e.target.value?编号(e.target.value):e.target.value)}
/>
);
}
const rootElement=document.getElementById(“根”);
render(,rootElement)代码>
您可以过滤掉handlechange中的输入值。大概是这样的:
const App = () => {
const [value, setValue] = useState("");
const handleChange = (e) => {
if (!isNaN(e.target.value)) {
setValue(e.target.value);
}
};
return (
<div className="App">
<input
type="text"
value={value}
onChange={handleChange}
className="w-100"
/>
</div>
);
};
const-App=()=>{
const[value,setValue]=useState(“”);
常数handleChange=(e)=>{
如果(!isNaN(如目标值)){
设定值(即目标值);
}
};
返回(
);
};
下面是演示:处理空输入和负数
// Converting App into Class-Component
class App extends React.Component {
// Set State
constructor(props) {
super(props);
this.state = {
number: ""
};
}
render() {
return (
<div className="App">
<input
type="number"
min="0"
step="1"
onChange={(e) => {
let val = parseInt(e.target.value, 10);
if (isNaN(val)) {
this.setState({ number: "" });
} else {
// is A Number
val = val >= 0 ? val : 0;
this.setState({ number: val });
}
}}
className="w-100"
// Assign State
value={this.state.number}
/>
</div>
);
}
}
//将应用程序转换为类组件
类应用程序扩展了React.Component{
//设定状态
建造师(道具){
超级(道具);
此.state={
编号:“
};
}
render(){
返回(
{
设val=parseInt(e.target.value,10);
if(伊斯南(瓦尔)){
this.setState({number:});
}否则{
//这是一个数字
val=val>=0?val:0;
this.setState({number:val});
}
}}
className=“w-100”
//分配状态
值={this.state.number}
/>
);
}
}
您可以向输入元素添加一个onKeyPress
侦听器,该侦听器将在onChange
之前触发,并调用一个函数来防止按下减号按钮时出现默认行为
const preventMinus = (e) => {
if (e.code === 'Minus') {
e.preventDefault();
}
};
<input
type="number"
min="0"
onKeyPress={preventMinus}
/>
你想让它成为一个受控输入吗?意味着它的值将通过状态变量设置?这也意味着每次对它进行更改时都要重新渲染它。如果(value<0){return-value}?@codemonkey是的…value={Math.max(0,this.state.inputValue)}
或者在handleChange
中进行类似的计算。你能看一下吗:我试过这个代码段,一旦0出现,你就无法摆脱它(除非你使用上/下箭头)。@Christophe对我有用。你是指不能退格/删除0,因此输入为空?对!这就是我的意思。@Christophe对允许空字符串值进行了小调整。你现在应该可以删除0
。
const preventMinus = (e) => {
if (e.code === 'Minus') {
e.preventDefault();
}
};
<input
type="number"
min="0"
onKeyPress={preventMinus}
/>
const preventPasteNegative = (e) => {
const clipboardData = e.clipboardData || window.clipboardData;
const pastedData = parseFloat(clipboardData.getData('text'));
if (pastedData < 0) {
e.preventDefault();
}
};
<input
type="number"
min="0"
onPaste={preventPasteNegative}
onKeyPress={preventMinus}
/>