前端四则运算验证

拥有回忆 提交于 2019-12-01 16:46:01

本文链接: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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!