Link gekopieerd
Haha lol ... ik had verwacht dat ie naar 1 zou typecasten, hahaha.
Link gekopieerd
Wat is volgens jou in zo'n geval de beste validatie en waarom?
Eh, je zou filter_var() kunnen gebruiken I suppose, maar ik gebruik een regexp.
Dit is niet zozeer "het beste", maar "het doet wat ik wil en wat de bedoeling is": een positief geheel getal met ten minste de waarde "1". Dit is wat het (zou) moet(en) zijn, dus dat is waar ik op controleer.
Link gekopieerd
>> maar ik gebruik een regexp.
Kun je eens laten zien hoe?
Link gekopieerd
<?php
function isIndex($in) {
return preg_match('#^[1-9][0-9]*$#', $in) === 1;
}
?>
Gotcha/little known fact: het meta karakter $ accepteert ook één linefeed karakter (\n), dus wellicht doe je er nog verstandig aan om $in te trimmen.
Alternatief is filter_var, maar blijkbaar boeit het die validatiefilter ook niet of er een linefeed in zit...
<?php
$test = "12\n";
function isIndex($in) {
return preg_match('#^[1-9][0-9]*$#', $in) === 1;
}
if (isIndex($test)) {
echo 'waffles<br>';
var_dump($test);
} else {
echo 'no waffles<br>';
var_dump($test);
}
?><hr><?php
function isIndexToo($in) {
return filter_var($in, FILTER_VALIDATE_INT, array('min_range' => 1));
}
$result = isIndexToo($test);
if ($result === false) {
echo 'no waffles<br>';
var_dump($result); // false
} else {
echo 'waffles<br>';
var_dump($result); // typecast to int
}
?>
Link gekopieerd
Andersom gaat filter_var wel weer goed met arrays om (geeft er geen warning op), terwijl:
$in = $_GET['id'] ?? 1;
preg_match('#^[1-9][0-9]*$#', $in); //<- warning bij ?id[]=1
Link gekopieerd
Ozzie PHP
29-01-2019 21:15
gewijzigd op 29-01-2019 21:17
thanks :)
@rob ... je zou dan dus nog moeten testen of het een string is bedoel je?
Link gekopieerd
Of bijvoorbeeld is_scalar().
Link gekopieerd
Ozzie PHP op 29/01/2019 21:15:15
je zou dan dus nog moeten testen of het een string is bedoel je?
Alles in $_GET en $_POST is sowieso een string als het geen samengesteld type (array) is.
Link gekopieerd
>> Of bijvoorbeeld is_scalar().
Ah oké.
>> Alles in $_GET en $_POST is sowieso een string als het geen samengesteld type (array) is.
Ja klopt, maar het kan dus ook een array zijn.
Link gekopieerd