gpt4 book ai didi

javascript - react 计算器 : limiting number of inputs

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:38:57 25 4
gpt4 key购买 nike

我正在尝试制作一个 React 计算器。大部分都完成了,但我有一个问题我不知道如何纠正:我似乎无法限制用户可以输入的运算符数量(例如,我想将“++++”限制为只是 "+"并且还可以防止两个运算符连接:+- 必须变为 -)。每次用户输入运算符(operator)时,我都尝试重置状态,但没有骰子。我在这里严重迷路了。我想到了正则表达式,但它似乎相当有问题(尝试的上下文太多)。

class Calculator extends Component {
constructor(props) {
super(props);
this.state = { value: '' };
this.handleClick = this.handleClick.bind(this);
}
handleClick(evt) {
const id = evt.target.id;
const result = evt.target.value;

this.setState(prevState => ({
value: `${prevState.value}${result}`.replace(/^0+\B/, '')
}));

if (id === 'equals') {
this.setState({ value: math.eval(this.state.value) });
} else if (id === 'clear') {
this.setState({ value: 0 });
}
}
}

最佳答案

您可以使用正则表达式来解决这个问题。使用基于 includes() 的方法的主要问题是它不会在输入字符串中强制执行正确的格式。也许您可以使用这样的正则表达式?

/^\d*([/\+-/*=]\d+)*$/gi

这将防止像 +++ 这样的多个操作数等问题:

class Calculator extends React.Component {

constructor(props) {


super(props);
this.state = { value: "" };
this.handleClick = this.handleClick.bind(this);
}
handleClick(evt) {

const result = evt.target.value;

// Update state
this.setState({
value: result
});

// Comine previous state with input value
//const combination = `${ this.state.value }${result}`;
console.log(result, 'combination', result)
// Use regular expression to check valid input. If invalid
// prevent further processing
if(!result.match(/^\d*([/\+-/*=]\d+)*$/gi)) {
console.error('Invalid input')
return
}

this.setState({ calculated: eval(result) });

}

render() {
return <h1>
<input value={this.state.value} onChange={(e) => this.handleClick(e)}/>
<p>{ this.state.calculated }</p>
</h1>
}
}

ReactDOM.render(<TodoApp />, document.querySelector("#app"))

有一个正在运行的 JSFiddle here for you to try out

关于javascript - react 计算器 : limiting number of inputs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com