par
blof » 06 janv. 2009, 15:56
Salut,
si tu tiens à le faire en PHP, comme l'a dit Calimero, il va falloir filtrer ce qui a été saisi.
<?php
$formule = '5*(4+6*( (7-8)/2.5))';
// on n'accepte que les espaces, chiffres, points, parenthèses, multiplications, divisions, additions et soustractions.
if(preg_match('#[^\s\d.()*/+-]#', $formule))
{
echo $formule,' : formule non valide';
}
else
{
if(@eval('$v='.$formule.';')===false)
{
echo $formule,' : formule non valide';
}
else
{
echo $formule,' = ',$v;
}
}
?>
le filtre mis en place n'interdit pas les formules "complexes" qui pourraient consommer beaucoup de ressources (?)
Si tu ne souhaites qu'un calcul simple du genre : un nombre, un opérateur, un nombre :
<?php
$formule = '1.1 + 5';
if(preg_match('#^\s*(?:\d|\d+\.{0,1}\d+)\s*[/*+-]\s*(?:\d|\d+\.{0,1}\d+)\s*$#', $formule))
{
eval('$v='.$formule.';');
echo $formule,' = ',$v;
}
else
{
echo $formule,' : formule non valide';
}
?>
Salut,
si tu tiens à le faire en PHP, comme l'a dit Calimero, il va falloir filtrer ce qui a été saisi.
[php]<?php
$formule = '5*(4+6*( (7-8)/2.5))';
// on n'accepte que les espaces, chiffres, points, parenthèses, multiplications, divisions, additions et soustractions.
if(preg_match('#[^\s\d.()*/+-]#', $formule))
{
echo $formule,' : formule non valide';
}
else
{
if(@eval('$v='.$formule.';')===false)
{
echo $formule,' : formule non valide';
}
else
{
echo $formule,' = ',$v;
}
}
?>[/php]
le filtre mis en place n'interdit pas les formules "complexes" qui pourraient consommer beaucoup de ressources (?)
Si tu ne souhaites qu'un calcul simple du genre : un nombre, un opérateur, un nombre :
[php]<?php
$formule = '1.1 + 5';
if(preg_match('#^\s*(?:\d|\d+\.{0,1}\d+)\s*[/*+-]\s*(?:\d|\d+\.{0,1}\d+)\s*$#', $formule))
{
eval('$v='.$formule.';');
echo $formule,' = ',$v;
}
else
{
echo $formule,' : formule non valide';
}
?>[/php]