我想知道是否可以为具有这些条件的计算器输入制作正则表达式,显示以0
:
- 第一个字符可以是一个
+
或-
符号(可选) - 如果第一个输入是 a
.
它应该被附加到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("")
);
}