如何操作和验证包含将由php评估的条件的字符串

时间:2010-08-06 13:32:22

标签: php string comparison

我正在创建的程序的一部分包括用户创建条件,我将存储在mysql数据库中。我希望语法比php允许的更容易,但由于这最终将使用eval()作为php代码运行,因此它需要具有有效的语法。

例如:

用户输入:

4<var1<=9 AND var2<6

结果应该是:

4<var1 AND var1<=9 AND var2<6

在评估之前,我用if语句将其包围,只返回true。

检测和拆分比较的好方法是什么?

另外,我如何测试生成的代码不会导致任何php错误,以便我可以通知用户?

编辑: 要明确的是,这些条件可以是任何标准条件,例如&gt;,&lt;,&gt; =,&lt; =,==。

1 个答案:

答案 0 :(得分:0)

即使是更加用户友好的方法也会像Treffynnon这样的界面说,解析字符串的初始方法是:

  1. 按空格分割字符串(需要空格)
  2. 遍历生成的数组
  3. 不包含AND和OR的项目是条件,由任何逻辑运算符(&gt;,&gt;,&gt; =,&lt; =,==,!=)
  4. 拆分
  5. 现在你解析了所有的sintax,它已经准备好解释了。
  6. 这将是一个例子(未经测试,认为它是伪代码) $ tokens = explode('',$ user_string);

    $to_evaluate = array();
    foreach( $tokens AS $tok )
    {
         if( $tok!='AND' && $tok!='OR' )
         {
             $parts = preg_split("/(<|>|<=|>=|==|!=)+/", $tok);
             if( count($parts)==3 )
             {
                 $to_evaluate[] = array( 'element1'=>$parts[0], 'condition'=>$parts[1], 'element2'=>$parts[2] );
             }
             else
                 echo "¿Error?";
         }
         else
            $to_evaluate[] = $tok;
    }
    

    此时,您必须遍历$ to_evaluate并开始评估您找到的每个条件。