Mathematische Funktionen einlesen

Infernus

Mitglied
Hi Leute,

gibt es die möglichkeit, eine als String eingelesene (per textfeld) mathematsche Funktion zu berechnen?

als beispiel hab ich da die Funktion: 8 / (4 - pow(5,2)).
Diese würde ich beispielsweise gerne in das Textfeld eingeben, sodass mir PHP das ergebniss berechnet.

(Hinterher wollte ich das dann so optimieren, dass man die Variable X einsetzt, die per replace() ersetzt werden kann in der funktion, und damit kann man dann werte aus für einen bestimmten wertebereich errechnen..)

Thx für Hilfen
Infernus
 
Eine bequeme, aber in der Form ganz und gar nicht empfehlenswerte Möglichkeit wäre die Verwendung von [phpf]eval[/phpf]:
PHP:
<?php

$funktion = $_GET['funktion'];
$ergebnis = eval('return ('.$funktion.');');

?>
Das Problem dabei ist, dass dadurch beliebiger PHP-Code ausgeführt werden kann, was natürlich eine kritische Sicherheitslücke darstellt.

Daher sollte man den String entweder vorher entsprechend überprüfen oder gleich einen mathematischen Parser implementieren.
 
Hi, ich hab ja nicht viel Ahnung, aber wenn man den String per Typumwandlung irgendwie in eine Float oder Integrer Zahl umwandelt, dann müsste man damit doch auch rechnen können. :(
 
ja, aber in dem String stand nich nur ein Wert, sondern eine komplette funktion.

Vielen dank, das klappt wunderbar mit dem eval() :D
 
Nein, bisher noch nicht.

Würde dich dann doch direkt mal fragen, weil mit dem "Pattern Syntax" doch noch mein Probleme habe:

wie lasse ich per preg_match() nachprüfen ob nur bestimmte symbole im übergebenen String enthalten sind?
(das wären dann 0-9, "-", "+", "/", "^", ":", "|" und "x")

kleine fragen schaffe ich damit noch, aber bei solchen verzweifle ich immer schnell :D
 
PHP:
<?php

	if( preg_match('#^[^0-9+\-/^:|x\s]+$#', trim($string)) && strlen(trim($string)) > 0 ) {
		echo 'Es wurdee ein oder mehrere unzulässige Zeichen benutzt!';
	}

?>
 
Kann ja sein, dass mich zu später Stunde schon die Müdigkeit überfallen hat, aber fehlt in dem Ausdruck nicht ein Asterisk als Multiplikationszeichen, Gumbo?
 
Kann ja sein, dass mich zu später Stunde schon die Müdigkeit überfallen hat, aber fehlt in dem Ausdruck nicht ein Asterisk als Multiplikationszeichen, Gumbo?
Ich habe mich lediglich an Infernus’ Vorgaben gehalten und die sehen dieses Zeichen nicht vor.
 
Zurück