Maison > développement back-end > tutoriel php > Comment évaluer en toute sécurité des expressions mathématiques à partir de chaînes en PHP ?

Comment évaluer en toute sécurité des expressions mathématiques à partir de chaînes en PHP ?

Mary-Kate Olsen
Libérer: 2024-12-27 22:44:17
original
795 Les gens l'ont consulté

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

Évaluation d'expressions mathématiques à partir de chaînes à l'aide d'Eval

Problème :

Lors de la tentative d'évaluation d'un expression mathématique stockée dans une chaîne à l'aide de eval(), une "erreur d'analyse" se produit, indiquant une fin inattendue de input.

Solution :

Bien qu'il ne soit généralement pas recommandé d'utiliser eval() à cette fin en raison de problèmes de sécurité, la modification de code suivante résout le problème :

$ma = "2+10";
$p = eval('return ' . $ma . ';');
print $p;
Copier après la connexion

En renvoyant explicitement le résultat dans une fonction eval(), le code attend une ligne complète de code.

Solution alternative :

Une solution plus sûre et plus efficace consiste à utiliser un tokenizer/analyseur pour gérer les expressions mathématiques. Voici un exemple simple basé sur une expression régulière :

$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;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal