ErikBooy007
Terugkerende gebruiker
- Lid geworden
- 24 mei 2007
- Berichten
- 3.814
Ik ben een 'applicatie' aan het schrijven om formules te plotten. Nu zou dit normaal gesproken geen probleem zijn, ware het niet dat ik met userinput te maken heb.
Ik kan dus niet verwachten dat men:
invult, maar men zal waarschijnlijk:
invullen.
Dit moet ik nu dus omzetten naar een formaat waar PHP mee kan rekenen. Er moeten allerlei formules kunnen worden ingevuld, sinussen, cosinussen, e-machten etc, dus een invoer veld voor a, b en c in de formule x^a + bx + c voldoet niet.
Als ik nu x^4 heb, kan ik dat middels preg_replace veranderen naar: pow(x, 4) door de volgende regex:
Maar ik bedacht mij, wat als een gebruiker (x+2)^2 invoert?
Waar ik graag hulp bij zou willen is het 'bedenken' van een regex om de volgende formules om te toveren naar een parseable formaat.
Voorbeelden:
Heel universeel is het dus:
waarbij a en b kunnen variëren van x tot een getal tot een expressie tussen haakjes.
Ik hoop dat het verhaal nog een beetje duidelijk is en bij voorbaat dank!
Ik kan dus niet verwachten dat men:
PHP:
pow(x,4) + 6 * pow(x, 2) + 12;
invult, maar men zal waarschijnlijk:
PHP:
x^4 + 6x^2 + 12
invullen.
Dit moet ik nu dus omzetten naar een formaat waar PHP mee kan rekenen. Er moeten allerlei formules kunnen worden ingevuld, sinussen, cosinussen, e-machten etc, dus een invoer veld voor a, b en c in de formule x^a + bx + c voldoet niet.
Als ik nu x^4 heb, kan ik dat middels preg_replace veranderen naar: pow(x, 4) door de volgende regex:
PHP:
preg_replace('/x\^([0-9])+/', 'pow(x, \\1)', $_POST['formula']);
Maar ik bedacht mij, wat als een gebruiker (x+2)^2 invoert?
Waar ik graag hulp bij zou willen is het 'bedenken' van een regex om de volgende formules om te toveren naar een parseable formaat.
Voorbeelden:
PHP:
x^2 -> pow(x, 2)
x^4 -> pow(x, 4)
(x+2)^2 -> pow(x + 2, 2)
x^(x+2) -> pow(x, x+2)
Heel universeel is het dus:
PHP:
a^b -> pow(a, b)
waarbij a en b kunnen variëren van x tot een getal tot een expressie tussen haakjes.
Ik hoop dat het verhaal nog een beetje duidelijk is en bij voorbaat dank!