Как манипулировать и проверять строку, содержащую условия, которые будут оцениваться php - PullRequest
0 голосов
/ 06 августа 2010

Часть программы, которую я создаю, состоит из пользователя, создающего условия, которые я буду хранить в базе данных mysql.Я хочу, чтобы синтаксис был несколько проще, чем тот, что позволяет php, но поскольку в конечном итоге он будет запускаться как код php с использованием eval (), он должен иметь правильный синтаксис.

Например:

Ввод пользователя:

4<var1<=9 AND var2<6

Результат должен быть:

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

До того, как это станет eval'd, я окружу его оператором if, который просто возвращает true.

Что было быхороший способ обнаружить и разделить это сравнение?

Кроме того, как я могу проверить, что полученный код не вызовет никаких ошибок php, чтобы, если это произойдет, я мог проинформировать пользователя?

Редактировать: для ясности, эти условия могут быть любыми стандартными условиями, такими как>, <,> =, <=, ==. </p>

1 Ответ

0 голосов
/ 06 августа 2010

Даже более удобный для пользователя подход будет интерфейсом, как говорит Треффиннон, первоначальный подход для разбора строки будет:

  1. разбить строку по пробелам (требуются пробелы)
  2. пересечь полученный массив
  3. элементы, которые не содержат ни И, ни ИЛИ, являются условиями, разделяя их любым логическим оператором (>,>,> =, <=, ==,! =) </li>
  4. Теперь вы проанализировали весь синтаксис, он готов к интерпретации.

Это будет пример (не проверен, рассмотрим псевдокод) $ 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 и начать оценку каждого найденного вами условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...