计算器显示的正则表达式

IT技术 javascript regex reactjs
2021-05-06 16:28:32

我想知道是否可以为具有这些条件的计算器输入制作正则表达式,显示以0

  • 第一个字符可以是一个+-符号(可选)
  • 如果第一个输入是 a.它应该被附加到0
  • 如果第一个输入是一个数字,它应该代替 0
  • 号码只能有一个 .
  • 在一个数字之后我可以有一个操作员 +-/*
  • 操作符/*后面可以跟一个+-
  • 如果输入是一个运算符并且最后一个字符是一个运算符它应该取代最后一个字符

允许输入示例:

-0.548*-7+54

错误输入示例:

*354*/56-+45

我可以混合使用regexconditionals(我正在使用 React)来做到这一点

const displayPattern = /([+-]?)(\d+)(\.?)(\d*)([*/]?)([+-]?)/g;
const isOperator = /[-+*/]/;
const isNumber = /\d/;
const isSign = /[-+]/;
const lastChar = state.slice(-1);

if (value.includes("AC")) {
  setState("0");
} else if (state.length === 1) {
  if (isNumber.test(value)) {
    if (state === "0") {
      setState(value);
    } else {
      setState(preVal => preVal + value);
    }
  } else if (value === ".") {
    setState(preVal => preVal + value);
  } else if (isSign.test(value)) {
    setState(value);
  }
} else {
  if (isOperator.test(lastChar) && isOperator.test(value)) {
    if (isSign.test(lastChar)) {
      setState(prevVal => prevVal.slice(0, -1) + value);
    } else {
      !isSign.test(value) && setState(prevVal => prevVal.slice(0, -1) + value);
    }
  }
  setState(
    preVal =>
      (preVal + value).match(displayPattern) &&
      (preVal + value).match(displayPattern).join("")
  );
}
1个回答

像这样的事情会起作用:

^[+-]?\d*\.*\d+(?:[+*\/-][+-]?\d*\.*\d+)*$
  • ^ - 开始字符串锚
  • [+-]? - 以可选的正号或负号开头
  • \d*\.*\d+- 可选数字,后跟可选小数,后跟所需数字。这允许我们考虑整数或小数。
  • (?:[+*\/-][+-]?\d*\.*\d+)* - 使用所需的前置运算符重复前两个项目符号的可选模式
  • $ - 结束字符串锚

https://regex101.com/r/srl7vj/1