【问题标题】:Regex for calculator display用于计算器显示的正则表达式
【发布时间】:2020-04-22 02:14:33
【问题描述】:

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

  • 第一个字符可以是+- 符号(可选)
  • 如果第一个输入是.,则应将其附加到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("")
  );
}

【问题讨论】:

  • 我已经用示例编辑了问题,感谢您的提示

标签: javascript regex reactjs


【解决方案1】:

这样的事情会起作用:

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

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

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 2013-03-13
    • 2016-02-13
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多