Autor Zpráva
Majkelju
Profil
Dobrý den,

mám kus textu, např 5*100/4. Jak zařídím, aby jsem z tohoto stringu vytvořil "výpočet", tudíž aby výstupem bylo 125 ? Počet a druh znamének může být pokaždé jiný.
1Pupik1989
Profil
Funkcí eval.
Joker
Profil
Majkelju:
Záleží o jaký text jde a odkud se vezme.

Pokud to je od návštěvníka stránky, tak si na to vyrobit parser.

Jestli jde o data ze spolehlivého místa a můžete se upsat krví, že s nimi nikdy nemůže být žádný problém, tak eval.

1Pupik1989:
Eval je potenciálně velmi nebezpečná funkce. Nikdy nedoporučujte použít eval bez varování před potenciálními riziky.
Majkelju
Profil
Joker: Jde o text uložený v databázi (který jsem do ní předtím naimportoval z xml, které je předem kontrolováno validátorem), který obsahuje tagy. Výběr z těch tagů už mám, uloží se mi to do pole stringů a jednotlivé stringy jsou právě ty výpočty, které potřebuju dostat do čísel... Zkusím to eval..
EDIT: Tak jsem projel pár příkladů a info o tom, co eval() dělá, a vůbec jsem tu funkci nepochopil...k čemu mi je v tomhle případě dobrá? Mohli byste uvést nějaký příklad? Případně ten parser je co? Jak se to tvoří?
Joker
Profil
Majkelju:
Parser prostě projde ten řetězec, identifikuje znamínka, to mezi nimi převede na čísla a udělá výpočet.

To eval bude fungovat jen v případě, že ty výpočty jsou výrazy v PHP (což pokud tam bude +-*/ asi fungovat bude).
Příklad:
$vstup = "5*100/4";
eval('$vystup = '.$vstup.';');
// $vystup = 125

Ale připomínám, že eval vyhodnotí jakýkoli PHP kód, takže:
$vstup = 'unlink("index.php")';
eval('$vystup = '.$vstup.';');
smaže soubor index.php (pokud existuje).

A zároveň pokud vstup nebude dávat platný kód, nebude to fungovat (nic se nespočítá a vrátí se false).
Majkelju
Profil
Joker: aha, takže ten parser se asi dělá pomocí regulárních výrazů... OK, takhle už je mi to jasný, díky moc ;) Ale zkusím to tím parserem, eval() mi nějak nefunguje ani když to dělám podle tohohle příkladu...Vůbec se neukáže obsah modálního okna, ve kterém mám textfield s těmi čísly...
1Pupik1989
Profil
Já vím, že eval je nebezpečný. Já jen odpověděl na otázku. Šlo by ověřit, jestli vstup jsou čísla a matematické znaky. Nicméně parser bude efektivnější.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: