Sven Rautenberg: Arithmetische Sytntax prüfen

Beitrag lesen

Moin!

ich stehe gerade vor einem Problem und weiß nicht so ganz wie ich anfangen soll. Der Anwender gibt in ein Eingabefeld eine Formel ein. Dazu darf er Zahlen, Platzhalter, die Operatoren + - * /^ und Klammern verwenden, z.B. 3*(a^2+2b)

Du erlaubst also eine gewisse Syntax, deren Regeln sich gottseidank an die der Mathematik anlehnen.

Um keinen Unsinn in die DB zu schreiben sollte diese Eingabe natürlich auf richtige Syntax überprüft werden. Gibt es da einen Trick oder muss ich da zur Uni und Algebra Bücher wälzen? Geht das dann übehaupt mit JavaScript?

Mit Javascript geht das auch. Ich denke aber, du unterschätzt die Komplexität deiner Aufgabe ganz erheblich.

Im Prinzip willst du (du weißt es nur noch nicht) einen Parser schreiben, der die Syntax der Formel analysiert und sein OK dazu gibt. Dazu mußt du den eingegebenen String in seine einzelnen Bestandteile (der Fachmann spricht von Token) zerlegen, diese Token zueinander in Beziehung setzen, einen Parsebaum aufbauen und im Erfolgsfall (wenn alles stimmt) grünes Licht geben - andernfalls eben "Syntax Error".

Da ich "Javascript" gelesen habe: Damit geht das natürlich grundsätzlich auch, aber wenn du verhindern willst, dass Blödsinn in die Datenbank kommt, mußt du die Prüfung serverseitig durchführen. Javascript kann lediglich dem Benutzer etwas helfen, Fehler schon vor dem endgültigen Abschicken zu erkennen.

Ich frage mich aber: Was willst du mit solch einer Formel-Eingabe erreichen? Doch nicht etwa auf dem Server rechnen? Das könnte unter Umständen böse enden, wenn du die Syntax nicht wirklich vollständig prüfst - insbesondere auf eingeschleppten bösen Programmcode. Denn die Formel darf wirklich nichts anderes tun als rechnen. Vereinfachungen wie "eval()" sind da definitiv nichts, was man anwenden sollte (allenfalls als Schnellprüfung mit Javascript noch _vor_ dem Eintragen in die DB).

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|