前端四则运算验证

本文链接:https://blog.csdn.net/smz8023/article/details/86168052
在做自定义表单时,遇到的一个问题,在webPC前端可随意拖拽表单,有一个表单为计算器的一个功能(ps:可随意编辑计算公式,但是计算公式不正确时,要给出错误提示);
有参考他人代码,也有自己补充的,整体来说实现了,效果还是很好的;

export const fn = (string, obj) => {
console.log(string);
console.log(obj);

// 剔除空白符
string = string.replace(/s/g, '');

// 错误情况,空字符串
if ("" === string) {
// return false;
}
if (/^[x÷+-*/]/.test(string)) {
// console.error(& amp; quot; 运算符开头 & amp; quot;);
return false;
}

//错误情况,运算符结尾
if (/[x÷+-*/]$/.test(string)) {
// console.error(& amp; quot; 运算符结尾 & amp; quot;);
return false;
}

// 错误情况,(后面是运算符或者)
if (/([x÷+-*/]/.test(string)) {
// console.error(& amp; quot; (后面是运算符或者) & amp; quot;);
return false;
}
// 错误情况,运算符连续
if (/[x÷+-*/]{2,}/.test(string)) {
return false;
}

// 空括号
if (/()/.test(string)) {
return false;
}

// 错误情况,括号不配对
var stack = [];
for (var i = 0, item; i < string.length; i++) {
item = string.charAt(i);
if ('(' === item) {
stack.push('(');
} else if (')' === item) {
if (stack.length > 0) {
stack.pop();
} else {
return false;
}
}
}

if (0 !== stack.length) {
return false;
}

// 错误情况,(后面是运算符
if (/([x÷+-*/]/.test(string)) {
return false;
}

// 错误情况,)前面是运算符
if (/[x÷+-*/])/.test(string)) {
return false;
}

// 错误情况,(前面不是运算符
if (/[x÷+-*/](/.test(string)) {
return false;
}

// 错误情况,)后面不是运算符
if (/)[x÷+-*/]/.test(string)) {
return false;
}

// 错误情况,变量没有来自“待选公式变量”
var tmpStr = string.replace(/[()x÷+-*/]{1,}/g, '`');
var array = tmpStr.split(',');
for (let i = 0, item; i < array.length; i++) {
item = array[i];
if (/[A-Z]/i.test(item) && 'undefined' == typeof (obj[item])) {
return false;
}
}
let stringarr = string.split(',');
let objarr = Object.keys(obj);
for (let index = 0; index < stringarr.length; index++) {
if (objarr.indexOf(stringarr[index]) > -1) {
if (stringarr[index + 1]==undefined){
} else if (stringarr[index + 1] !== '+' && stringarr[index + 1] !== '.' && stringarr[index + 1] !== '-' && stringarr[index + 1] !== 'x' && stringarr[index + 1] !== '÷' && stringarr[index + 1] !== '(' && stringarr[index + 1] !== ')'){
return false
}
}

}

return true;
}

————————————————
版权声明:本文为CSDN博主「smz8023」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/smz8023/article/details/86168052

原文地址:https://www.cnblogs.com/ruoruchujian/p/11693950.html