note 114678 deleted from function.eval by googleguy

From: Date: Fri, 24 Feb 2017 21:12:35 +0000
Subject: note 114678 deleted from function.eval by googleguy
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-208829@lists.php.net to get a copy of this message
Note Submitter: Daniele Mams ---- Modified version of sooncj answer: your regex not allow something like this: 1-(1). So I modified your code: I change the 'Allowed PHP functions': <?php function calc($equation) { // Remove whitespaces $equation = preg_replace('/\s+/', '', $equation); echo "$equation\n"; $number = '(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number $functions = '(?:abs|atan|ceil|cos|exp|gmp_fact|intval|log(10)?|rand|round|sin|sqrt|tan)'; // Allowed PHP functions $operators = '[\/*\^\+-]'; // Allowed math operators $regexp = '/^([+-]?('.$number.'|'.$functions.'\s*\((?1)+\)|\((?1)+\))(?:'.$operators.'(?1))?)+$/'; // Final regexp, heavily using recursive patterns if (preg_match($regexp, $equation)) { $equation = preg_replace('!pi|π!', 'pi()', $equation); // Replace pi with pi function echo "$equation\n"; eval('$result = '.$equation.';'); } else { $result = false; } return $result; } ?> This function allow also this 'strange' math function: 1) a-+b 2) a+-b 3) a++b << PHP not allow this 4) a--b. << PHP not allow this But not allow with 3 '+' or '-': 1) a---b, a+++b, a-++b, a+--b, a+-+b, a-+-b. Allow other Math functions. For a++b or a--b i write another function that block that!

« previous php.notes (#208829) next »