前端四则运算验证

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

posted on 2019-10-17 18:40  我却醉的像条狗  阅读(555)  评论(0编辑  收藏  举报

导航