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

  • 相关阅读:
    sqlserver游标概念与实例全面解说
    Dos网络查看命令
    SQL Server和Access数据读写
    表中记录查询排序(设置排序规则)
    sql server中扩展存储过程
    sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
    合并有数据的列
    防止用户同时使用一个存储过程
    (转载) 两个数据库比较 对比视图存储过程及表结构差异
    Sql Server REPLACE函数的使用
  • 原文地址:https://www.cnblogs.com/ruoruchujian/p/11693950.html
Copyright © 2011-2022 走看看