Moin Moin!
also ein eval nachbauen, nur weil eval evil ist?
Nein, eben KEIN volles eval nachbauen, sondern einen sehr beschränkten Parser, der nur "Taschenrechner" versteht.
Wäre es da nicht viel einfacher, eval zu nutzen und vorher den String nach kritischen Ausdrücken zu durchsuchen
Du schlägst vor, eval() abzusichern. Das ist leichter gesagt als getan. Sicher, so lange Du nur die vier Grundrechenarten, Ziffern und den (Dezimal-)Punkt erlaubst, ist das noch recht einfach zu erschlagen (Suche nach einem nicht erlaubten Zeichen, Abbruch wenn gefunden). Kommen Klammern und Funktionen wie sqrt, log, ln hinzu, wird es schwieriger. Irgendwann endet Deine Absicherung bei einem vollwertigen Parser, oder sie läßt Ausdrücke durch, die Schaden anrichten können.
Wobei man sich fragen muss, ob es denn auf einer Taschenrechnerseite wirklich nötig ist, den Besucher vor seinen eigenen Eingaben zu schützen.
Nicht unbedingt vor seinen eigenen, aber vor injizierten.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".