反应计算器,不确定如何提高正则表达式

时间:2018-10-24 16:16:35

标签: regex reactjs

我需要改进以下正则表达式以添加两个条件:它不应该允许“ 00”(或任何数量的前导零),也不应该允许“ 1 ...”(整数后只能是一个小数) 。例如,用户可以单击两次“ 0”,但只允许一个“ 0”。与操作员相同:用户可以单击“ +-”(或其任意组合),但仅允许“-”。与“ ..”等相同。这不适用于数字(可以使用1233388479223)。

this.setState(prevState => ({
  value: `${prevState.value}${result}`.replace(/([\/\+-/*=])([\/\+\-\*=])/gi, '$2')
}))

计算器代码

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(/([\/\+-/*=])([\/\+\-\*=])/gi, '$2')
}));

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

}



render() {
    return(
            <div id="container">
                <Display value={this.state.value} />
                <Button onClick={this.handleClick} id="zero" value={'0'} />
                <Button onClick={this.handleClick} id="one" value={'1'} />
                <Button onClick={this.handleClick} id="two" value={'2'}/>
                <Button onClick={this.handleClick} id="three" value={'3'} />
                <Button onClick={this.handleClick} id="four" value={'4'} />
                <Button onClick={this.handleClick} id="five" value={'5'} />
                <Button onClick={this.handleClick} id="six" value={'6'} />
                <Button onClick={this.handleClick} id="seven" value={'7'} />
                <Button onClick={this.handleClick} id="eight" value={'8'}  />
                <Button onClick={this.handleClick} id="nine" value={'9'} />
                <Button onClick={this.handleClick} id="decimal" value={'.'} />
                <Button onClick={this.handleClick} id="equals" value={'='} />
                <Button onClick={this.handleClick} id="clear" value={'clear'}  />
                <Button onClick={this.handleClick} id="add" value={'+'} />
                <Button onClick={this.handleClick} id="subtract" value={'-'} />
                <Button onClick={this.handleClick} id="multiply" value={'*'} />
                <Button onClick={this.handleClick} id="divide" value={'/'} />
            </div>
)

}

1 个答案:

答案 0 :(得分:0)

您将需要几个正则表达式来执行所需的操作。您可以一个一个地称呼他们。

首先,您的正则表达式中有一个错误,您尚未转义减号char(表示一个字符范围),应该是:

/([\/+\-/*=])([\/+\-*=])/g

删除前导零,如果后跟数字:

   /^0+(?=[1-9])/

替换为empty string


删除除前导zero之外的所有字符,然后删除dot

/^0+(?=\.)/

替换为零的'0'


删除多个点:

/\.+/g

替换为dot

您应该一个接一个地打电话给替换人员。 希望对您有帮助。