【发布时间】:2020-04-22 02:14:33
【问题描述】:
我想知道是否可以为具有这些条件的计算器输入创建正则表达式,显示以 0 开头:
- 第一个字符可以是
+或-符号(可选) - 如果第一个输入是
.,则应将其附加到0 - 如果第一个输入是一个数字,它应该代替
0 - 号码只能有一个
. - 在数字之后我可以有一个运算符
+-/* - 运算符
/*后面可以跟+- - 如果输入是一个运算符并且最后一个字符是一个运算符,它应该代替最后一个字符
允许输入示例:
-0.548*-7+54
错误输入示例:
*354*/56-+45
我可以混合使用 regex 和 conditionals(我正在使用 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