Leestekens filteren (hoezatdatookalweer)
t is vandaag niet een van de moeilijkste vragen volgens mij:
Hoe kon ik nog maar leestekens (bv: :,.?/><:'"{[}]+=) verwijderen uit een input, of eigenlijk, dan een return false terug geven? Spaties, cijfers en streepjes (-_)moeten wel blijven staan!
Ben even aan t zoeken geweest op php.net, bij ctype_ , maar daar staat volgens mij niks tussen wat daar bij past. Of ze filteren Spaties, cijfers en streepjes er uit, of ze laten deze tekens staan...
klik? Anders kun je daar nog uithalen wat ik gebruik om de leestekens weg te halen ;-).
Bedoel je niet zoiets als dit: Had hier zelf ook al aan gedacht, maar eigenlijk wil ik alleen maar checken of er leestekens in zitten, en zo ja een false geven.
Het gaat hier om het posten van een gebruikersnaam.
Deze mag wel bv
Naam Achternaam, naam achternaam, naam_achternaam, naam-achternaam , naam1234, naam_1234, naam-1234 of iets dergelijks zijn.
Dit mag niet:
Naam/achternaam
Naam "Achternaam"
of iets dergelijks zijn.
In dat geval wil ik ze er niet afslopen, maar een false weergeven.
Code (php)
1
2
3
2
3
<?php
$string = preg_replace("#[^\w\-\_[0-9] ]#", "", $string); // haal alle tekens zoals quotes, komma's en punten uit de string, behalve het koppelteken
?>
$string = preg_replace("#[^\w\-\_[0-9] ]#", "", $string); // haal alle tekens zoals quotes, komma's en punten uit de string, behalve het koppelteken
?>
Kijk daar eens naar?
Maar dan gaat er toch een <u>replace</u> plaatsvinden? Dan komt de gebruikersnaam niet meer overeen met wat er ingevoerd is omdat het gereplaced is.
De gebruiker mag niet een naam invoeren met leestekens, daar komt het op neer.
Dus dit idee:
Code (php)
alleen doet alnum alleen alfanummerieke caracters, en geen spaties!
Code (php)
1
2
3
4
2
3
4
<?php
$string = "Maarten_'t_Hart&&";
var_dump(preg_match("#[^\w \'\-\_]#", $string));
?>
$string = "Maarten_'t_Hart&&";
var_dump(preg_match("#[^\w \'\-\_]#", $string));
?>
Geeft een 1 terug (hij matcht met &&, hij is fout).
Geeft een 0 terug (hij matcht nergens mee, dus issie goed).
@Jezpur,
tja, zo kan het ook natuurlijk... :-o
Mijn php staat nog in de kinderschoentjes, maar mijn gedachten nog veel meer volgens mij...
@Mark: Ach, dat komt vanzelf :-). Ben zelf ook nog niet zo goed met regex's, maar dit wist ik toevallig al wel. Zoek ook eens hier op de site onder tutorials naar Regular Expressions, kun je er nog wat over lezen ook ;-).
Ik probeer ze zoveel mogenlijk te vermijden xD
Eén regel code of 8 regels code? Misschien scheelt de snelheid niet eens zo erg. Maar ik ben wel fan van ingewikkelde expressions :-P.
Een hoop php functies zijn ook maar wraps. Intern zal er ook wel iets gebeuren zoals gebeurt in functies die je zelf schrijft.
$voornaam = filter_input(INPUT_POST, 'voornaam', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
na enig studeren op FILTER_SANITIZE_STRING ontdek ik dat dit natuurlijk ook een filter is, juist zoals al 3 keer is voorgesteld, en ik juist niet wou!
Ik maak nu gebruik van de preg_match(), zodat ik kijk of die <b>matcht</>, wat returns in true of false.
Naar mijn weten gebeurt dat niet met de FILTER_SANITIZE_STRING?