WiMu: Javascript-Math-Syntax in PHP-Math-Syntax umwandeln

Hallo liebes Forum,

bei einem kleinen Projekt soll der Nutzer die Möglichkeit haben, in ein Textfeld mathematische Ausdrücke einzugeben, die dann von PHP weiterverarbeitet werden ... kurz und knapp, ca. so:

  
$test = $_POST['mein Eingabefeld'];  
@eval("\$test = $test;");  
if( !is_numeric( $test ) ) {  
    $test = false; // naja, halt irgendwas, wenn keine Zahl rauskommt  
}  
  
// usw.  

Nun wäre es ganz schick, wenn man z.B. für Potenzen nicht pow(x, y) eingeben müsste (das kann man von den Besuchern kaum erwarten), sondern wenn's mit x^y funktionierte - so macht es z.B. auch der Google-Calculator.
Klar könnte man das, was ich vorhabe auch komplett in javascript bauen ... aber die Rundungsfehler ... *seufz*

Bei ganz einfachen Potenzen und quick&dirty funktioniert's z.B. so:

  
$power = explode ( '^', $test );  
if(count($power) == 2) {  
    $test = "pow({$power[0]}, {$power[1]})";  
}  

Das geht natürlich nichtmehr bei Ausdrücken wie (3/2)^12 / (2/1)^7 bzw. pow(3/2, 12) / pow(2/1, 7) oder (5^1/2) / 2 bzw. pow(5, 1/2) / 2 (genau die beiden Beispiele bräuchte ich u. a.).
Fällt euch vielleicht ein kluger regulärer Ausdruck (oder auch mehrere) ein, mit dem man das bewerkstelligen könnte? Oder sonst vielleicht eine Idee?

  1. Mit reg. Ausdrückenn kommst du da nicht mehr weit. Googel mal nach "expression parser" oder formelparser oder so ähnlichen Wörtern. Da gibts schon so manches.
    Es hängt natürlich immer davon ab wie komplex die Ausdrücke werden können. Aber allgemein gesehen ist es das sinnvollste wenn du wirklich beliebige Ausdrücke behandeln kannst. So wahnsinnig schwer ist das gar nicht, wenn das Konzept dazu passt.

    1. Vielen Dank für den Tipp ... leider habe ich bis jetzt nur kostenpflichtige Lösungen gefunden - werde aber noch ein wenig weiter googeln; wobei mir gerade eingefallen ist, dass es für MediaWiki eine passende Extension gibt ... vieleicht werde ich da auch fündig (so kompliziert soll's gar nicht werden).

      Grüße,
      WiMu