我需要接受来自用户的字符串。
像(2*34)+96/2*6-98
之类的东西
而不是像4*(2*aggw*^^)*as.,,;
我需要验证它是否是一个有效的算术方程式。
答案 0 :(得分:1)
我设置了一个检查以下内容的函数:
*^
,-)
和+/
,同时允许其他未指定的组合(例如((
,--
, +(-(
)Infinity
关键字)值
document.querySelector("input").addEventListener("keyup", function() {
document.getElementById("output").innerHTML = isValid(this.value);
});
function isValid(str) {
var invalidOperatorPairs = ["**", "*/", "/*", "//", "()", "^^", "^/", "/^", "^*", "*^", "-)", "+)", "*)", "/*", "^)", "-*", "-/", "-^", "+*", "+/", "+^", "(*", "(/", "(^","/)","*)","+)","-)","^)"]
str = "(" + str + ")";
var open = 0;
for (var i = 0, len = str.length; i < len; i++) {
var curr = str[i];
if (curr === "(") {
open += 1;
} else if (curr === ")") {
open -= 1;
if (open < 0) {
return false
}
}
if (i > 0) {
for (var j = 0, oplen = invalidOperatorPairs.length; j < oplen; j++) {
if (str[i - 1] == invalidOperatorPairs[j][0] && curr == invalidOperatorPairs[j][1]) {
return false
}
}
}
}
if (open !== 0) return false;
var sections = str.split(/[\+\-\*\/\^\)\(]/g);
for (i = 0, len = sections.length; i < len; i++) {
if ((sections[i].length > 0) &&
!(Number(sections[i]) !== NaN && isFinite(sections[i]))) {
return false
}
}
return true;
}
<input type="text" value="" />
<div id="output"></div>
答案 1 :(得分:0)
您可以在javascript中使用正则表达式来执行此操作: 例如:
var op1= "(2*34)+96/2*6-98";
var op2 = "4*(2*aggw*^^)*as.,,;";
//Regular expression to use
var regEx = /([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+)/g;
//Following will be true
alert(regEx.test(op1));
//Following will be false
alert(regEx.test(op2));
您可以找到更好的匹配正则表达式。我找到了这个here。