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; } } }