eval Fehlerausgabe
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abs
beispiel
beitrag
buchstabe
eingabe
ergebnis
error
fehler
fehlerhafte eingabe
fehlermeldung
formel
funktion
log
mache
methode
sicherheit
stehen
term
test
wurzel
-
@ jacr:
Jetzt mu? ich mir mal deinen Link reinziehen. Warum selber was schreiben wenn andere das f?r mich tun ;)
Ich habe schon ein Wiki4you Modul damit geschrieben.
Ich ganz nett. Muss mal sehen, was ich damit mache. :D
Aber damit kann man schon so einiges machen.
ttobsen schrieb:
Das hat alles damit nichts zu tun. Das PRoblem ist eifnach das eine nichtdefinierte Zahl berechnet wird in manchen F?llen (wie zum Beispiel Wurzel aus -1). Und diese F?lle m?cht ich abfangen. Da PHP aber anscheinend keine Fehlermeldung ausgibt, sondern munter da weiterrechnet kann ich das nicht ohne weiteres abfangen.
Und f?r jede mathematsiche Funktion einen Zahlenbereich zu definieren m?cht ich schlie?lich auch nicht.
Irgendwie verstehe ich dein Problem nicht.
Wenn ein mal NaN raus kommt, dann ist das Ergebniss NaN.
D.h. sollte in der Formel irgendwo die Wurzel aus -1 auftauchen kommt NaN raus.
Alles was du tun musst ist doch.
<?
function GetValue($term, $x)
{
$y = false;
$CompleteTerm = "\$y=".$term;
@eval($CompleteTerm);
if ($y == false || $y=='NaN') // Bin mir nicht sicher ob NaN oder wie du gesagt hast NAN zur?ckgegeben wird aber NaN ist mathematisch richtig und ich denke PHP h?lt sich daran
{
return false;
}
return $y;
}?>
Edit
Habe gerade mal geschaut:
http://de2.php.net/manual/de/function.is-nan.php
also geht
if ($y == false || is_nan($y))
Beitrag ge?ndert am 11.01.2006 00:18 von jacr -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Meine letzte Frage daher noch:
Wie mu? mein Suchausdruck f?r preg_replace aussehen wenn neben einem buchstaben "e" alles stehen darf ausser eine Zahl oder ein belieber Buchstaben?
Ich habe ja gehofft, dass alopex noch was dazu schreibt. ;)
Denn Regul?re Ausdr?cke kann er vermutlich besser als ich.
Allerdings habe ich auch nicht ganz verstanden was du m?chtest.
Du m?chtest dass sowas wie e$%' erlaubt ist?
Wof?r soll das gut sein?
Buchstabe ist \w hast ja schon gelernt. Und kein Buchstabe ist \W.
Und Zahl ist wie du ja schon wei?t \d also ist keine Zahl \D
Somit w?re der Ausdruck dann /e[\D\W]*/ aber das habe ich jetzt mal wieder nicht getestet.
Obwohl jetzt wo ich dar?ber nachdenke. Bin ich mir da nicht sicher. Kann sein, dass er Alle Zeichen erlaubt, da Zahlen ja keine Buchstaben sind und Buchstaben keine Zahlen.
Probier es mal aus.
Jens -
Formuliere mal die Anforderungen eindeutig:
Was darf drin vorkommen?
Und was nicht?
Gibt es eine Reihenfolge?
"neben einem Buchstaben e" kann hei?en:
"e" darf vorkommen und andere Zeichen
oder
vor oder nach "e" d?rfen andere Zeichen vorkommen.
??? -
Ich w?rde es mal mit '/\We\W/' probieren, das sollte die "e"s in "exp" und "rad2deg" ausschlie?en ...
-
dann eben '/[^a-z]e[^a-z]/'
und das Gleiche f?r "x".
Ah funzt doch, allerdings habe ich ein wenig ab?ndern m?ssen:
$SearchString[1] = '/\We\W|e\W|\We|\Ae\Z/';
Sicher? Die Regeln sind doch irgendwie redundant ....
\We\W schlie?t doch \Ae\Z ein (IMHO) ... -
Mach das doch so.
$term = $HTTP_POST_VARS["term"]; $term = strtolower(trim($term)); preg_match_all('/\A([\s\d\+\-\*\/\%\(\)\,\.]|abs|acos|asin|atan|atan2|ceil|cos|deg2rad|e|exp|floor|log|log10|pi|pow|rand|rad2deg|round|sin|sqrt|tan|x)+\Z/',$term,$treffer); $tempString['pi'] = 'pi()'; $tempString['e'] = 'exp(1)'; $tempString['x'] = '$x'; $term=''; foreach($treffer[0] as $temp){ if($tempString[$temp]!=''){ $term.=$tempString[$temp]; }else{ $term.=$temp; } } $term_for_calculate .= ";";
(nat?rlich wieder nicht getestet)
Ach ja.
Schau mal ob exp erkannt wird.
Wenn nicht setze das e nach exp.
Jens
Beitrag ge?ndert am 12.01.2006 00:56 von jacr -
@Jacr:
Das hat auch nicht funktioniert. Es wurde nichts ersetzt, egal in welcher Kombination ich das ganze aufrief.
Also wenn du es mit preg_match_all machen m?chtest (umwandeln des Strings):
preg_match_all('/([\s\d\+\-\*\/\%\(\)\,\.]|abs|acos|asin|atan|atan2|ceil|cos|deg2rad|exp|floor|log|log10|pi|pow|rand|rad2deg|round|sin|sqrt|tan|x|e)/',$term,$treffer);
Das was du da hattest war zum Pr?fen.
Also so wie es alopex machen wollte.
P.S. das e ist zum Schluss. Habe es getestet. ;)
Jens -
Ich hab jetzt nicht genau daruf geachtet worum in der esten und zweiten seite des threedas geht, aber ich glaube bei dem problem mit der eulerschern zahl helfen zu k?nnen...
der matchstring muss so aussehen \W?e\W? das matcht auch wenn in der eingabe nur e steht...
PS: wenn ich jetzt total am thema vorbei bin, dann l?scht den post einfach
Edit:
Mein vorheriger matchstrng k?nnte probleme mit sachen wie "exp" geben, wenn er da nicht match mach aus den beiden ? einfach *
Beitrag ge?ndert am 12.01.2006 13:41 von theuntouchables -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage