ホームページ >バックエンド開発 >PHPチュートリアル >PHP で文字列から数式を安全に評価するにはどうすればよいですか?

PHP で文字列から数式を安全に評価するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 22:44:17704ブラウズ

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

Eval を使用した文字列からの数学式の評価

問題:

eval() を使用して文字列に格納された数式、「解析」

解決策:

セキュリティ上の懸念から、この目的で eval() を使用することは一般的に推奨されませんが、次のコード変更により問題が解決されます:

$ma = "2+10";
$p = eval('return ' . $ma . ';');
print $p;

eval() 関数内で結果を明示的に返すことにより、コードは完全な結果を期待します。コード行。

代替解決策:

より安全で効率的な解決策は、トークナイザー/パーサーを使用して数式を処理することです。これは簡単な正規表現ベースの例です:

$ma = "2+10";

if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) {
    $operator = $matches[2];

    switch ($operator) {
        case '+':
            $p = $matches[1] + $matches[3];
            break;
        case '-':
            $p = $matches[1] - $matches[3];
            break;
        case '*':
            $p = $matches[1] * $matches[3];
            break;
        case '/':
            $p = $matches[1] / $matches[3];
            break;
    }

    echo $p;
}

以上がPHP で文字列から数式を安全に評価するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。