带有 +,-,*,/,(,) 符号的运算表达式,怎样才能验证书写得是否正确,有标准算法吗?我这几天搞这个头都搞大了。另外,如果是再包含 And,Or,=,<>,<,<=,>,>= 而构成的条件表达式呢?请大家救我于水深火热中啊,谢谢了。分数不够再加:)

解决方案 »

  1.   

    这个问题讨论很多了,
    给你两个思路1.利用sql 的表达式处理能力,
    比如 select 3*(4+5)
    这个很容易计算,并且验证语法2.利用window带的javascript 的ocx控件,凡是javascript支持的表达式语法他都支持。同样,逻辑运算他们也能处理
      

  2.   

    谢谢,您说的第一种使用 SQL 的方法我也想过,可是在表达式错误的时候系统会弹出错误信息,如何屏蔽掉此信息呢?能写出详细的代码吗?我用的数据库是 Oracle 8.17。
      

  3.   

    我自己曾經寫了過類似的東西;給你個大概的思路,具體的你自己想想;
    //驗證sValue的合法性(前後空格會去掉);返回錯誤碼,為空表sValue合法
    function sFunGetErrMsg(sValue: string): string;
    var
      sTmp: string;
    begin
      sValue := Trim(sValue);
      Result := '';
      if sValue = '' then Exit;  case sValue[1] of
        '[':
          begin
            sTmp := sFunGetErrMsg1(sValue, '[');
            if sTmp <> '' then
            begin
              Result := sTmp; Exit;
            end;
          end;
        '{':
          begin
            sTmp := sFunGetErrMsg1(sValue, '{');
            if sTmp <> '' then
            begin
              Result := sTmp; Exit;
            end;
          end;
        '(':
          begin
            sTmp := sFunGetErrMsg2(sValue, 1);
            if sTmp <> '' then
            begin
              Result := sTmp; Exit;
            end;
          end;
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
          begin
            sTmp := sFunGetErrMsg3(sValue, 1);
            if sTmp <> '' then
            begin
              Result := sTmp; Exit;
            end;
          end;
        'S': //'SUM'
          begin
            sTmp := sFunGetErrMsg4(sValue);
            if sTmp <> '' then
            begin
              Result := sTmp; Exit;
            end;
          end;
      else
        begin //不合法字符
          Result := 'Not valid Char'; Exit;
        end;
      end;
    end;