Om spam te voorkomen gebruik ik in een mailform oa deze code
} elseif(!preg_match("/^[A-Za-z0-9-_.+%]/", $_POST['bericht'])){
echo ' Geen vreemde tekens in je bericht aub.<br><br>';
echo '<a href="javascript:history.back(1);">Terug</a><br><br>';
Vreemd genoeg worden letters met een accent (zoals é è à) en accenten ook tegengehouden. Maar wat blijkt: deze letters met een accent worden omgezet in à (hoofdletter A en een tilde).
Hoe kan ik er voor zorgen dat de letters met een accent wel toegelaten worden, maar de à niet?
Dat dacht ik net in de gauwigheid ook al te zien, maar ervan uitgaande dat het gewerkt heeft en ik niet heel veel tijd had om ernaar te kijken, had ik er (nog) geen opmerking over gemaakt. Maar volgens mij heb je gelijk. Dan zou het dus moeten worden:
Volgens mij gaat dat nog steeds niet werken, omdat [a-z] ook met een unicode-modifier niet matcht op bijvoorbeeld ä. Beter kun je in de regex gebruik maken van character types:
De \w matcht hoofd- en kleine letters, cijfers en de underscore. En wat letters betreft ook de versies met accentjes, als je de u-modifier gebruikt.
Let wel op dat je de - meteen na de [ of meteen voor de ] zet, omdat PCRE anders zou kunnen denken dat het een range indicator is.
Ander puntje: je wilt de gehele input matchen, dus je regex moet eindigen met een $. Doe je dat niet, dan test 'ie alleen de input tot aan het eerste teken dat niet gematcht wordt. In de praktijk betekent dat, dat als het eerste teken van je input geldig is, de regex 'true' zal teruggeven. En omdat je waarschijnlijk ook wel berichten van meer dan 1 woord wilt toestaan, heb ik een \s (whitespace) aan de regex toegevoegd.
Maar, zoals al eerder is opgemerkt: reacties met komma's, dubbele punten, aanhalingstekens, haakjes of andere redelijk normale tekens worden nog steeds geweigerd.
1) Vreemd genoeg worden letters met een accent (zoals é è à) en accenten ook tegengehouden.
2) Maar wat blijkt: deze letters met een accent worden omgezet in à (hoofdletter A en een tilde).
Eerst zeg je dat ze worden tegengehouden. Maar vervolgens worden ze omgezet? Dat klinkt niet heel logisch. Iets kan niet worden omgezet als het even daarvoor is tegengehouden.
Dus ... leg eens even duidelijk uit wat er precies gebeurt.
Het is eerder omgekeerd denk ik. Eerst zal alles met een accent omgezet worden naar die à en vervolgens wordt dat tegengehouden.
Als test typ ik deze zin: éèà´` dit is een test
Als alert krijg ik: geen vreemde tekens in jouw bericht aub.
Het is dus de bedoeling dat letters met een accent wel mogen. Maar niet het finaal omgezet teken zoals Ã.
Tsja, als je ´ en/of ` in je input hebt staan, zal je regex inderdaad niet matchen. Een los accentteken is iets anders dan een letter met accent en moet dus ook afzonderlijk gematcht worden.
Tsja, als je ´ en/of ` in je input hebt staan, zal je regex inderdaad niet matchen. Een los accentteken is iets anders dan een letter met accent en moet dus ook afzonderlijk gematcht worden.
Die afzonderlijke ´of `zijn toch accenten die gebruikt worden bij bv 's morgens?