0

我正在为 IRC 机器人开发一个数学函数,但是我似乎无法让它适用于数字的幂,即 5**2,目标是尽可能保证它的安全,因为它确实使用了 eval,并且除此之外能够做很多一般的数学运算。现在,这就是我所拥有的。是否有更好/更有效的方法?提前致谢。

 case ':$math':
              $input = rtrim($this->get_message()); // grabbing the user input
              $input = preg_replace('/[0-9+*%.\/-(\*\*)]/', '', $input);
              $sum = $this->do_math($input); // store the return of our input passed through the do_math function into $sum
              if($sum == "NULL") {
                  break;
              }
              else {
                  $this->send_message("The value is: ".$sum); // echo the value
              }
              break;





  function do_math($input) {
        $result=eval("return ($input);"); // using eval to preform math on the specified input
        if($result == NULL) {
            $this->send_message("Invalid characters were assigned in the math function!");
            return "NULL";
            break;
        }
        else {
            return $result; // return the sum
        }
    }
4

1 回答 1

1

正如我在评论中所说,php 中没有 ** 运算符,应该使用 pow 函数来代替......你可以做些什么来模拟它,但是在输入端抛出另一个 preg_replace 。

$input = rtrim($this->get_message()); // grabbing the user input
$input = preg_replace('/([0-9.]+)\*\*([0-9.]+)/', 'pow($1, $2)', $input);
$sum = $this->do_math($input); 
于 2013-07-08T16:56:22.040 回答