-2

私は次のコードを持っています:

<?php
function calculate_string( $mathString )    {
   $mathString = trim($mathString);     // trim white spaces
   $mathString = preg_replace("/[^0-9\(\)\+\-\*\/\.]/", "", $mathString);       
   return eval("return $mathString;");   
 }

$string1 = " (1 + 1) *3+ (2 + 2)";
echo calculate_string($string1);
$string2 = " (1 + 1) *3+* (2 + 2)";
echo calculate_string($string2);
?>

関数calculate_string()は、文字列でパラメータとして指定された数式を計算する必要があります。string1の最初の呼び出しはうまくいきます。

しかし、どうすれば数学かどうかを検出できます。文字列には数学があります。seconda呼び出しのように構文エラーが発生し、エラーの種類に応じて値を返すか、単純に何も返さない(より良い解決策)?したがって、問題は、数式に構文エラーが含まれている場合の2回目の呼び出しでのparse_errorです。

助けてください。

4

1 に答える 1

0

さて、あなたは次のようなスポーツをしたいと思います*3+*

$string2 = " (1 + 1) *3+* (2 + 2)";

文字列に一般的なエラーがないか自分でチェックするか、eval()の戻り値(docs)をチェックすることで、さまざまな方法でこれを行うことができます。

PHP 7以降、評価されたコードに解析エラーがある場合、eval()はParseError例外をスローします。PHP 7より前では、この場合eval()はFALSEを返し、次のコードの実行は正常に続行されました。set_error_handler()を使用してeval()で解析エラーをキャッチすることはできません。

于 2012-11-28T20:34:14.903 に答える