如何检查用户给定的字符串是否是有效的算术方程式
How do I check if a given string from a user is a valid arithmetic equation?
我需要接受来自用户的字符串。
类似(2*34)+96/2*6-98
而不是像4*(2*aggw*^^)*as.,,;
那样的非法字符串
我需要验证它是否是一个有效的算术方程。
我会设置一个函数来检查以下内容:
- 无效的相邻字符对,如
*^
、-)
和+/
,同时允许其他未指定的组合(如((
、--
、+(-(
) - 不正确的括号,无论是开括号与闭括号的数量不正确,还是没有相应的开括号的闭括号
- 指定的允许运算符之间的非数字或无限(
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>
您可以在javascript中使用regex来执行此操作:例如:
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));
您可能会找到更好的匹配正则表达式。我在这里找到了这个。
相关文章:
- DOM 元素是否可以具有其值为任意对象(而不是字符串)的属性
- 如何安全地确定变量是否是多个字符的字符串
- 给定一个日期/时间字符串,w javascript/jquery,你怎么能确定它是否是今天
- 如何检查输入是否为数字?如果是字符串警报错误
- Node.js with Geddy:geddy.string.uuid(x) 是否确保字符串是唯一的
- 检查字符串是否是 Spotify URL
- 如何有效地检查路径字符串是否是 jQuery 中另一个路径字符串的子项
- 我如何修改这个JavaScript正则表达式来检查字符串是否是一个最多必须有2个十进制数字的数字
- 检查数组中的所有元素是否都是字符串
- 如何检查字符串是否是索引为[JAVASCRIPT]的子字符串
- 如何检查用户给定的字符串是否是有效的算术方程式
- 确定两个字符串中的一个是否是另一个StringJavascript的子字符串
- 如何检查输入字符串是否是有效的正则表达式
- 是否可以将SVG对象的自定义属性设置为数字而不是字符串?
- 如何检查字符串是否是自然数
- 测试是否所有给定的char's都是字符串- Javascript
- 检查元素是否包含字符串,并且除了字符串什么都没有-可能是正则表达式
- 在JavaScript中检查字符串是否是字母数字
- 单元测试:如何检查生成的javascript(字符串)是否是有效的javascript
- 检查字符串是否是数组中字符串的一部分