2016-04-26 39 views
1

Die Frage ist so einfach wie der Titel: Wie stelle ich sicher, dass eine Zeichenfolge eine Berechnung enthält?Überprüfen, ob die Zeichenfolge eine Berechnung enthält

Ich habe eine Zeichenfolge, die eine Berechnung enthalten sollte. Die Zeichenfolge könnte etwa so aussehen: "10 * 10/2 * 3". Aber es gibt immer Leute, die etwas kaputt machen wollen, also möchte ich überprüfen, ob es eine Berechnung ist. Der Benutzer könnte etwas wie folgt eingeben: "alert('hi!')".

Wenn ich eval() verwende, wird der Benutzer trotzdem benachrichtigt (wenn der Benutzer Folgendes ausgefüllt hat: "alert()").

Kann jemand wissen, wie ich überprüfen kann, ob die Zeichenfolge eine Berechnung enthält und nichts anderes?

+0

möglicherweise mit einer Regex und einer weißen Liste für Zeichen/Zahlen. –

+0

Können Sie mir ein Beispiel für eine Regex für meinen Fall geben, @NinaScholz? –

+0

Bitte verwenden Sie 'eval' nicht mit vom Benutzer eingegebenen Code. Das könnte zu Problemen führen :-( – Tuvia

Antwort

3

Wenn Sie nur überprüfen wollen, ob ein String eine arithmetische Operation enthält, coul Sie es mit einem regulären Ausdruck wie folgt überein:

([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+) 

ABER, ich dringend eine JavaScript-Bibliothek als mathjs verwenden vorschlagen, oder die JavaScript Expression Evaluator library, mit denen Sie tun, zum Beispiel:

Parser.evaluate("3^x", { x: 7 }); 

Diese Bibliotheken Pflege nehmen Code-Injektion zu ignorieren, das ist sicher ... :-)

+0

Mathjs funktioniert perfekt: D Danke! –

1

In diesem Fall würde ich eine andere Lösung empfehlen.

Statt zu versuchen, white list Ihre Zeichenfolge, um sicherzustellen, dass es nur mathematische Ausdrücke ist, würde ich empfehlen, versuchen Sie Bibliothek speziell für den Umgang mit Mathe in erster Linie zu verwenden.

Ich habe keine Erfahrung mit ihm, aber eine schnelle Google von „Javascript-Mathe-Parser“ brachte mich auf diese: http://mathjs.org/docs/expressions/parsing.html

0

Sie könnten nur für Zeichen des Eingangs Stachel überprüfen. Wenn der Stich irgendwelche Zeichen wie (a, b, c ... z) enthält, dann wird er nicht ausgewertet.

Verwandte Themen