2016-04-26 3 views
0

Mein Problem: Innerhalb eines PHP-Funktionscodes sollte für einen Export in JavaScript vorbereitet werden. So habe ich diese Zeile:JavaScript Basis ist eine Dezimalzahl in math.pow Funktion

$operationvalue_new2 = preg_replace_("#exp\((.*)\^(.*)\)#", "Math.pow($1, $2)", $operationvalue_new2); 

Problem ist nun der Wert von $1 eine Dezimalzahl sein kann, so dass ich nicht mehr richtig berechnen. Wenn $1 1,2 wäre, wird nur mit 1 berechnet.

Kann jemand bitte helfen?

Antwort

1

Es gibt einige Fragen, die ich mit dem regex sehen:

  • Die Strings in doppelten Anführungszeichen könnte die Zeichenfolge mit Schrägstriche weniger wirksam zu entkommen, da reguläre Ausdrücke maskiert werden müssen selbst: Versuchen Sie es mit doppelten Anführungszeichen Schrägstriche:

    "#exp\\((.*)\\^(.*)\\)#" 
    
  • Die .* Matches so viel wie möglich. Aber das schließt Fälle wie exp(1,4);exp(2^4) ein. Verwenden Sie nicht gierige Streichhölzer oder die Zeichen ausschließen nicht erforderlich:

    "#exp\\(([^\\^\\)]*)\\^([^\\^\\)]*)\\)#"   
    
  • Darüber hinaus jeden beliebigen Text enthalten, auch mit dieser Lösung, riskant, vor allem, wenn der resultierende Text wird ein Teil des erzeugten JavaScript-Code sein. Betrachten wir zum Beispiel, was passiert, wenn der Text exp(</script>^5) enthält. Stattdessen passen nur wohlgeformte Zahlen, wenn das die Absicht ist:

    "#exp\\((\\d+(?:\\.\\d+)?)\\^(\\d+(?:\\.\\d+)?)\\)#" 
    
Verwandte Themen