Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menilai Ungkapan Matematik dengan Selamat daripada Rentetan dalam PHP?

Bagaimana untuk Menilai Ungkapan Matematik dengan Selamat daripada Rentetan dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 22:44:17697semak imbas

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

Menilai Ungkapan Matematik daripada Rentetan Menggunakan Eval

Isu:

Apabila cuba menilai sesuatu ungkapan matematik yang disimpan dalam rentetan menggunakan eval(), "Ralat Parse" berlaku, menunjukkan penghujung input yang tidak dijangka.

Penyelesaian:

Walaupun secara amnya tidak disyorkan untuk menggunakan eval() untuk tujuan ini kerana kebimbangan keselamatan, pengubahsuaian kod berikut diselesaikan isunya:

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

Dengan mengembalikan hasil secara eksplisit dalam fungsi eval(), kod mengharapkan barisan kod yang lengkap.

Penyelesaian Alternatif:

Penyelesaian yang lebih selamat dan cekap ialah menggunakan tokenizer/penghurai untuk mengendalikan ungkapan matematik. Berikut ialah contoh berasaskan regex mudah:

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

Atas ialah kandungan terperinci Bagaimana untuk Menilai Ungkapan Matematik dengan Selamat daripada Rentetan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn