用正则写一个校验运算公式:如 "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]"这样是合格的,运算符号包括 "+ - * / = " ,如多个公式用逗号隔开,每个公式的计算项不限。 不正确例子:"r[0]=r[1]+r[3]r[2]"、"r[0],"、"r[0]=r[1]/"、"r[0]=r[1]=r[2]"、"r[0]=r[1]+r[2],"等,总体说验证正确的运算公式,多个公式中间最后隔开,每个公式的计算项和运算符号不限,越简单越好。

解决方案 »

  1.   

    re = /^r\[\d+\]=r\[\d+\]([\+\-\*\\]r\[\d+\])+$/
      

  2.   

    这个不是很全面吧,逗号你没有进行判断,等号在前是合格如果把公式掉过来计算在前等号在后你这就不对了 如r[0]+r[1]=r[2]
      

  3.   


    var str = "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]";var bln =  (!/[^r[\]+\-*\/=\d,]/.test(str))
    && /^e(?:\,e)*$/.test(
    str.replace(/r\[\d+\]/ig, 'x')
    .replace(/x(?:[+\-*\/]x)*/g, 'e')
    .replace(/e\=e/g, 'e')
    );
    alert(bln);
      

  4.   

    var regex=/^(?:r\[\d+\]=r\[\d+\](?:[\+\-\*\/]r\[\d+\])+(?:,(?!$))?)+$/ig;
      

  5.   

    三楼是等号固定了:
    var str = "r[4]+r[0]*r[6]=r[7],r[2]=r[1]+r[3]";这样就无法验证了,等号可以在前在后
      

  6.   


    说错了是四楼是等号固定了: 
    var str = "r[4]+r[0]*r[6]=r[7],r[2]=r[1]+r[3]";这样就无法验证了,等号可以在前在后
    三楼的代码有误,而且没明白我的要求。希望仔细看看我的问题在回答。
      

  7.   


     var regx = /(r\[\d+\]=r\[\d+\]([+-\/*]r\[\d+\](?!r\[\d+\]),?)+)+/g;
     var str = "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]";
     if(regx.exec(str)[0]===str){
       alert("匹配");
     }else{
       alert("不匹配");
     }
      

  8.   

    不固定形式的话  var regx = /(r\[\d+\]([+-\/*=]r\[\d+\](?!\w+\[[^\[\]+-*=]+),?)+)+/g;
      

  9.   

    不好意思,9L写错了
    不固定形式的话var regx = /(r\[\d+\]([+-\/*=]r\[\d+\](?!r\[\d+\]),?)+)+/g
      

  10.   

    验证运算公式是否正确的吧,可以直接
    var flag = false;//运算公式是否正确false:正确true:错误
    try{
      flag = eval(str); //将计算的元素改成true或false 运算符改成& 或||
    }catch(e){
      flag = true;
    } 这样可行不?