示例#1
0
 static function f_Misc_CheckCondition($Str)
 {
     // Check if an expression like "exrp1=expr2" is true or false.
     $StrZ = $Str;
     // same string but without protected data
     $Max = strlen($Str) - 1;
     $p = strpos($Str, '\'');
     if ($Esc = $p !== false) {
         $In = true;
         for ($p = $p + 1; $p <= $Max; $p++) {
             if ($StrZ[$p] === '\'') {
                 $In = !$In;
             } elseif ($In) {
                 $StrZ[$p] = 'z';
             }
         }
     }
     // Find operator and position
     $Ope = '=';
     $Len = 1;
     $p = strpos($StrZ, $Ope);
     if ($p === false) {
         $Ope = '+';
         $p = strpos($StrZ, $Ope);
         if ($p === false) {
             return false;
         }
         if ($p > 0 and $StrZ[$p - 1] === '-') {
             $Ope = '-+';
             $p--;
             $Len = 2;
         } elseif ($p < $Max and $StrZ[$p + 1] === '-') {
             $Ope = '+-';
             $Len = 2;
         } else {
             return false;
         }
     } else {
         if ($p > 0) {
             $x = $StrZ[$p - 1];
             if ($x === '!') {
                 $Ope = '!=';
                 $p--;
                 $Len = 2;
             } elseif ($x === '~') {
                 $Ope = '~=';
                 $p--;
                 $Len = 2;
             } elseif ($p < $Max) {
                 $y = $StrZ[$p + 1];
                 if ($y === '=') {
                     $Len = 2;
                 } elseif ($x === '+' and $y === '-') {
                     $Ope = '+=-';
                     $p--;
                     $Len = 3;
                 } elseif ($x === '-' and $y === '+') {
                     $Ope = '-=+';
                     $p--;
                     $Len = 3;
                 }
             } else {
             }
         }
     }
     // Read values
     $Val1 = trim(substr($Str, 0, $p));
     $Val2 = trim(substr($Str, $p + $Len));
     if ($Esc) {
         $Nude1 = clsTinyButStrong::f_Misc_DelDelimiter($Val1, '\'');
         $Nude2 = clsTinyButStrong::f_Misc_DelDelimiter($Val2, '\'');
     } else {
         $Nude1 = $Nude2 = false;
     }
     // Compare values
     if ($Ope === '=') {
         return strcasecmp($Val1, $Val2) == 0;
     } elseif ($Ope === '!=') {
         return strcasecmp($Val1, $Val2) != 0;
     } elseif ($Ope === '~=') {
         return preg_match($Val2, $Val1) > 0;
     } else {
         if ($Nude1) {
             $Val1 = '0' + $Val1;
         }
         if ($Nude2) {
             $Val2 = '0' + $Val2;
         }
         if ($Ope === '+-') {
             return $Val1 > $Val2;
         } elseif ($Ope === '-+') {
             return $Val1 < $Val2;
         } elseif ($Ope === '+=-') {
             return $Val1 >= $Val2;
         } elseif ($Ope === '-=+') {
             return $Val1 <= $Val2;
         } else {
             return false;
         }
     }
 }