Uitleg gevraagd preg_replace
Onderstaande validatiecode kom ik in een contactformulier tegen. Heb 2 vragen daarover.
1) Niet toegestane karakters worden omgezet naar blanco?
2) Wat is de bedoeling van 040?
1) Niet toegestane karakters worden omgezet naar blanco?
2) Wat is de bedoeling van 040?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
function clean_input($str){
$str1 = preg_replace("/(\s){2,}/",'$1',$str);
$allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i";
$str1 = preg_replace($allowed,"",$str1);
return $str1;
}
$str1 = preg_replace("/(\s){2,}/",'$1',$str);
$allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i";
$str1 = preg_replace($allowed,"",$str1);
return $str1;
}
Gewijzigd op 18/03/2014 15:21:11 door Guido -
Quote:
For filename tidying I prefer to only ALLOW certain characters rather than converting particular ones that we want to exclude. To this end I use ...
Allows letters a-z, digits, space (\\040), hyphen (\\-), underscore (\\_) and backslash (\\\\), everything else is removed from the string.
Code (php)
1
2
3
4
2
3
4
<?php
$allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i";
preg_replace($allowed,"",$str));
?>
$allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i";
preg_replace($allowed,"",$str));
?>
Allows letters a-z, digits, space (\\040), hyphen (\\-), underscore (\\_) and backslash (\\\\), everything else is removed from the string.
Bron
1) Alles behalve genoemde wordt verwijdert
2) Spatie. Dit kan makkelijker met \s
Gewijzigd op 18/03/2014 15:28:04 door Michael -
Hoi,
Thanks, toevallig ook ooit door jou geplaatst op php.net? (zelfde naam)
Guido
Thanks, toevallig ook ooit door jou geplaatst op php.net? (zelfde naam)
Guido
Gewijzigd op 18/03/2014 15:32:43 door Guido -
040 is de ANSI naam voor een space. Maar deze regex bevat veel te veel onnodige \, dit is genoeg:
Nee toeval :-)
040 is het ASCII nummer voor een spatie.
040 is het ASCII nummer voor een spatie.
Helemaal duidelijk, dank jullie wel :-)
Guido
Guido
Toch nog even een vraagje.
Waar doet de ^ voor die vóór a-z staat?
En wat doet de i aan het einde?
Guido
Waar doet de ^ voor die vóór a-z staat?
En wat doet de i aan het einde?
Guido
Quote:
For example, the character class [aeiou] matches any lower case vowel, while [^aeiou] matches any character that is not a lower case vowel.
Bron: http://nl3.php.net/manual/en/regexp.reference.character-classes.php
Bron: http://nl3.php.net/manual/en/regexp.reference.character-classes.php
Quote:
i (PCRE_CASELESS)
If this modifier is set, letters in the pattern match both upper and lower case letters.
Bron: http://nl3.php.net/manual/en/reference.pcre.pattern.modifiers.php
If this modifier is set, letters in the pattern match both upper and lower case letters.
Bron: http://nl3.php.net/manual/en/reference.pcre.pattern.modifiers.php
Hoi,
Dank je. Begrijp ik het zo goed:
^ = kleine EN hoofdletter toegestaan
i = combi van kleine en hoofdletters toegestaan
Guido
Dank je. Begrijp ik het zo goed:
^ = kleine EN hoofdletter toegestaan
i = combi van kleine en hoofdletters toegestaan
Guido
Gewijzigd op 13/06/2014 19:33:59 door Guido -
Nee, ^ heeft niets met kleine of grote letters te maken.
^ tussen [ en ] betekend dat de betekenis van dat [] block ge-inverteerd moet worden.
http://code.tutsplus.com/tutorials/regular-expressions-for-dummies-screencast-series--net-7887
^ tussen [ en ] betekend dat de betekenis van dat [] block ge-inverteerd moet worden.
http://code.tutsplus.com/tutorials/regular-expressions-for-dummies-screencast-series--net-7887
Hallo,
Ik breek dit oude topic even open omdat ik ergens tegenaan loop.
Het valt me op dat ik alleen 'ASCII printable characters' kan toevoegen aan deze functie.
Alles vanaf OCT 200 (The extended ASCII codes) pakt hij niet:
http://www.ascii-code.com/
Wie kan uitleggen waarom? En hoe kan ik tóch andere karakters toevoegen?
Guido
Ik breek dit oude topic even open omdat ik ergens tegenaan loop.
Het valt me op dat ik alleen 'ASCII printable characters' kan toevoegen aan deze functie.
Alles vanaf OCT 200 (The extended ASCII codes) pakt hij niet:
http://www.ascii-code.com/
Wie kan uitleggen waarom? En hoe kan ik tóch andere karakters toevoegen?
Guido
Gewijzigd op 27/09/2014 22:39:06 door Guido -
Door hexadecimale codes te gebruiken: \xe9
Of, als je nog verder in de unicodetabel wilt porren dan ASCII 0xff: \x{215a}
Of, als je nog verder in de unicodetabel wilt porren dan ASCII 0xff: \x{215a}
Hallo Willem,
Ik gebruik nu de OCT codes uit de tabel.
De HEX code staat ook in die tabel, zoals bv het euro teken die OCT 200 heeft en HEX 80, maar beide doen het niet.
Heeft het misschien toch met die 'printable characters' te maken? Daar valt bv het euro teken niet onder.
Guido
Ik gebruik nu de OCT codes uit de tabel.
De HEX code staat ook in die tabel, zoals bv het euro teken die OCT 200 heeft en HEX 80, maar beide doen het niet.
Heeft het misschien toch met die 'printable characters' te maken? Daar valt bv het euro teken niet onder.
Guido
Wellicht moet je nog een u-modifier meegeven, dus iets als:
preg_match("/\x80/u",$str);
preg_match("/\x80/u",$str);
Werkt ook niet.. Jammer.
Andere vraag, helemaal bovenaan plaatste ik de code die ik gebruik. Vergeten te vragen wat deze regel doet:
Ik bedoel natuurlijk de variabelen na preg_replace
Guido
UPDATE: sorry, ben er al achter, heeft te maken met aantal spaties in een tekst.
Andere vraag, helemaal bovenaan plaatste ik de code die ik gebruik. Vergeten te vragen wat deze regel doet:
Ik bedoel natuurlijk de variabelen na preg_replace
Guido
UPDATE: sorry, ben er al achter, heeft te maken met aantal spaties in een tekst.
Gewijzigd op 28/09/2014 11:44:28 door Guido -
> heeft te maken met aantal spaties in een tekst.
Om precies te zijn: wanneer de input twee of meer whitespace-tekens achter elkaar heeft, laat dan alleen de eerste staan.
Om precies te zijn: wanneer de input twee of meer whitespace-tekens achter elkaar heeft, laat dan alleen de eerste staan.
de - heeft een speciale betekenis:
a-z : a tot en met z
.-_ is dus van . tot en met _
als je met .-_ bedoelt: 1 van deze 3 tekens, dan moet je de - alsnog escapen, of eenvoudiger: als eerste of laatste zetten dus een [ ]
a-z : a tot en met z
.-_ is dus van . tot en met _
als je met .-_ bedoelt: 1 van deze 3 tekens, dan moet je de - alsnog escapen, of eenvoudiger: als eerste of laatste zetten dus een [ ]




