2009-03-27 42 views
2

nicht sicher, wie man Wort dieses und so hinzufügen nicht viel Glück habe in Google sucht ...JavaScript-Funktion eine Reihe von Zahlen

Ich brauche einen Wert für eine Reihe von Zahlen zu berechnen.

Beispiel. Ein Benutzer gibt "1,00 + 2,00 - 0,50" in ein Textfeld ein. Die Funktion sollte in der Lage sein, diese Zeichenfolge zu übernehmen und das Ergebnis zu berechnen, um $ 2,50 zurückzugeben.

Jeder hat einen Weg, dies in seiner Trickkiste zu tun?

Antwort

4

Wenn es tatsächlich eine mathematische Operation einfach eval verwenden, nicht sicher, ob das, was Sie aber wollen:

document.write(eval("1.00 + 2.00 - 0.50")); 
+0

Wenn die Eingabezeichenfolge auch $ enthielt, könnten Sie einfach "$" durch "" ersetzen, bevor Sie es an eval übergeben –

+0

Guter Punkt, das war eigentlich meine einzige Angst, als ich antwortete. –

+0

Wahrscheinlich möchten Sie mehr Validierung als nur das Ersetzen von Währungssymbolen durchführen. –

2

Theo T Antwort sieht aus wie der direkteste Weg, aber wenn Sie benötigen, um Ihre eigenen einfach zu schreiben Parser, können Sie durch splitting die Zeichenfolge starten und nach Ihren Operatoren in der Ausgabe suchen.

+0

+1 für die Verknüpfung mit anderen Antworten auf ihre Boxen :) Hinweis: Geben Sie nicht die vollständige URL, nur den Teil nach dem #. Auf diese Weise wäre der Link sofort statt eines vollständigen Neuladens in einigen Browsern;) – Seb

+0

@Seb: Danke für den Tipp. –

0

Nur um Theos Antwort zu verbessern.

Sie sollten eval NICHT verwenden, außer Sie sind absolut sicher, was Sie an diese Funktion übergeben. Da eval den Code ausführen wird, können Sie einen beliebigen JavaScript-Code schreiben und er wird ausgeführt.

Eine der Möglichkeiten, sicher, dass Sie nur den richtigen Code erhalten wird, mit dem folgende Skript:

var str = "$34.00 + $25.00 alert('some code')"; // Our string with code 
var pattern = /[0-9\+\-\.\*\/]*/g; // Regex pattern 
var math_operation = str.match(pattern).join(''); // Getting the operation 
document.write(eval(math_operation));​ // Getting the result 

Dies ermöglicht nicht nur die Benutzer, Dinge zu geben wie $34.00 + $5.00 sondern verhindert auch von Code injiziert.

Verwandte Themen