Ik ben aan het proberen geweest om een soortgelijke regex te maken om user input op te schonen voor output. het lukt alleen niet echt en heb al verschillende dingen geprobeerd. Na een paar uur hacken ben ik bang dat ik me er een beetje blind op staar....de reeks van geprobeerde dingen is eindeloos maar hier een paar die redelijk lijken.
Ik stel jullie reacties op prijs en het advies is goed! Toch zijn het niet de antwoorden die ik zoek.
Waar jullie tegen aan kijken is 1 regel code van een uitgebreid script voor een spelletje. Ik doe dit als hobby en dingen later aanpassen is geen probleem. Ik heb geen haast....
Wat mij nog al stoort is dat jullie geen idee hebben van het hele plaatje en wat het exacte doel is...toch nemen jullie aan dat wat jullie zeggen wat ik nodig heb om te bereiken wat ik wil. Het hele plaatje is te uitgebreid om uit te leggen en de kans is groot dat jullie de helft niet lezen. Zoals nu. Er komen (en hoeven) geen namen in of eurotekens of andere dingen....dat is een aanname. E-mails die worden op een andere pagina ingevoerd en verwerkt. De gebruiker hoeft geen tags in te voeren die kan gewoon enteren in een textbox...iemand heeft dat aangenomen. Ik heb bijna letterlijk gezegd dat ik zelf alles omzet naar 1 tag. Het heeft niets met beveiliging te maken...hoewel het niet eens onveilig is. Waarom zou ik "<script>alert("hacked")</script>" op willen slaan? Waarom zou ik Scheiße of señor opslaan als er in het engels gecommuniceerd word...
Als je iemand iets wil leren luister(lees) dan eens goed naar de vraag...ik vraag niet naar HTML! HTML is wel het doel....ik vraag naar PHP en PCRE syntax.
Ik kwam hier omdat ik me blind staar op de opbouw van een regex...succes mannen maar morgen ga denk ik weer naar stackoverflow.com!
Het grappige is dat je zelf het exacte doel niet aangeeft en dan een ander ervan beschuldigt dat ie niet leest. Waar gaat dat mis denk je? Bij een ander of bij jezelf? Met dat gedrag ben je op SO al helemaal niet welkom.
Ik denk dat dat ook juist het probleem is.
Je bent nu zo gefocust op deze regex, dat je in een tunnel terecht bent gekomen.
Ik snap je benadering prima. (afgezien van die <br>, want als je gebruiker gewoon een enter mag typen, dan vult jouw script dus met nl2br() die <br>. En dan had je regex dus vóór nl2br() moeten staan).
En ja: als iemand alleen maar letters mag typen, zullen er weinig fouten kunnen optreden. Behalve dan als iemand een copy-paste doet van de hele php-handleiding, want dat gaat weer niet passen in je database (hoop ik).
Maar je blokkeert zoveel meer dan nodig is. En hierboven staan al zat voorbeelden van tekens die jij niet toestaat, maar die volkomen onschuldig zijn en waarvan je heel goed voor kunt stellen dat ze wel zinnig zijn in de invoer.
Ongeveer 40 minuten...opgelost. En wat te lezen/leren.
@Ben. Ik bedoel het echt niet slecht. Het doel is in de eerste post al aangegeven. een regex die het tegenovergestelde doet van wat al mogelijk is. characters niet toelaten...en verwijderen met preg_replace.
@Ozzie. Ik voel me niet gepest. nogmaals...er komen/horen geen namen in. ;)
@Ivo. Ik ben idd gefocused omdat ik een doel heb. Nogmaals...de gebruiker hoeft geen <br> te typen. En als iemad een c/p doet gaat het door deze regex. mb_strimwidth zorgt er voor dat het niet langer word dan ik wil en in de DB in takt blijft.Wil je nog meer weten of is het goed zo? ;)
Een oplossing voor een nodeloos lastig probleem: immers de gebruiker voert geen <br> in, maar Enter.
Daar had je dus een heel veel simplere regex gehad als je voor nl2br() de check deed.
Maar daarnaast heb je nu een oplossing voor een non-probleem. Er kan geen enkel serieus probleem optreden als iemand in zijn profiel een é een puntkomma en een ! zou hebben staan.
zelfs een < en een " zou onschuldig zijn, als je maar netjes overal htmlspecialchars gebruikt.
Ik denk dat de meeste mensen die hierboven gereageerd hebben, in gedachte houden dat je over een aantal weken tóch letters met accenten nodig hebt.
En dat kort daarna blijkt dat je ook een ! en ? wel handig vindt.
En dat je dan dus eigenlijk je filter steeds meer oprekt tot een situatie die je ook bereikte met htmlspecialchars.
Geloof me: het komt best veel voor dat de beschrijving van de probleemstelling "het is altijd A óf B" na oplevering door de klant wordt bijgesteld naar "ja, maar behalve als C, en soms komt D ook voor maar dan wel gelijktijdig met B"
Maar goed.
Vermoedelijk ga je voorlopig even blij zijn met je regex.