zoukankan      html  css  js  c++  java
  • 前端四则运算验证

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

  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/ruoruchujian/p/11693950.html
Copyright © 2011-2022 走看看