En fait tu peux valider absolument ce que tu veux en passant par filter_var. Même si le filtre que tu cherches n'existe pas, tu as toujours la possibilité d'utiliser FILTER_CALLBACK qui permet de passer n'importe quelle fonction:
var_dump(filter_var('Janine', FILTER_CALLBACK, ['options'=>function($i) { return strlen($i)>4 && strlen($i)<51; }]));
J'attire ton attention sur le fait que strlen se contente de renvoyer le nombre d'octets d'une chaîne, ce qui n'est pas forcément son nombre de caractères au sens où on l'entend communément. Par exemple "Théo" encodé en UTF-8 passera le test car le "é" peut être encodé sur deux octets "\xc3\xa9", voire sur trois "\x65\xcc\x81" (un "e" avec le caractère combinant "accent aigu").
Occasion de présenter un autre filtre pour les chaînes, FILTER_VALIDATE_REGEXP qui permet de valider un chaîne avec une expression régulière:
var_dump(filter_var('Théo', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/\A\X{5,50}\z/u']]));
\A et \z sont les bornes de la chaîne, \X représente n'importe quel glyphe ou caractère blanc (tout ce qui occupe la place d'un caractère quelque soit son nombre d'octets), le flag u permet de lire la chaîne en UTF-8 et non octet par octet comme c'est le cas par défaut.
Après il est légitime de se demander pourquoi passer par filter_var pour faire ce type de contrôles alors qu'on pourrait l'écrire directement comme tu l'as fait?
Cela permet par exemple de construire un tableau associatif dont les clefs seraient les clefs de $_POST auxquelles seraient associées les filtres à appliquer à chacune. De cette manière un simple foreach sur ce tableau permet de valider toutes les données post en utilisant systématiquement filter_var.
Partager