Position actuelle: Accueil> Derniers articles> Nettoyer les données avec filter_var_array et filtres personnalisés

Nettoyer les données avec filter_var_array et filtres personnalisés

gitbox 2025-05-29

En PHP, le filtrage des données et la vérification sont des liens clés pour assurer la sécurité et la stabilité des applications. PHP fournit un ensemble puissant de fonctions de filtre, où Filter_Var_Array est un outil très pratique pour le traitement des données de tableau multidimensionnelles. Il prend non seulement une variété de filtres intégrés, mais nous permet également de combiner des fonctions de filtrage personnalisées pour obtenir un filtrage de données plus précis et complexe.

Cet article expliquera en détail comment utiliser Filter_Var_Array combiné avec des filtres personnalisés pour effectuer un filtrage efficace des données complexes.


1. Introduction à filter_var_array

filter_var_array est utilisé pour appliquer différentes règles de filtrage aux éléments d'un tableau. Il reçoit deux paramètres:

  • Le premier paramètre est le tableau à filtrer.

  • Le deuxième paramètre est un tableau associatif qui définit le filtre correspondant à chaque clé.

exemple:

 <?php
$data = [
    'email' => '[email protected]',
    'age' => '25',
];

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 18, 'max_range' => 99]
    ],
];

$result = filter_var_array($data, $filters);
var_dump($result);

À ce stade, $ résultat renvoie les données filtrées ou false .


2. Utilisez des filtres personnalisés

Les filtres intégrés répondent à la plupart des besoins, mais certaines données complexes nécessitent une logique personnalisée, comme la vérification complexe des formats de chaîne, la vérification du champ transversal, etc.

filter_var_array prend en charge l'implémentation de filter_callback combinée à des fonctions personnalisées:

 <?php
function custom_filter($value) {
    // Exemple:Seules les lettres et les chiffres sont autorisés,Et la longueur est5arriver10Personnages
    if (preg_match('/^[a-zA-Z0-9]{5,10}$/', $value)) {
        return $value;
    }
    return false;
}

$data = [
    'username' => 'User123',
    'email' => 'invalid-email',
];

$filters = [
    'username' => [
        'filter' => FILTER_CALLBACK,
        'options' => 'custom_filter',
    ],
    'email' => FILTER_VALIDATE_EMAIL,
];

$result = filter_var_array($data, $filters);
var_dump($result);

3. Exemples complexes combinant filter_var_array avec filtres personnalisés

En supposant qu'il existe la structure de données complexe suivante, les règles de filtrage suivantes sont nécessaires:

  • Nom d'utilisateur : 5-15 numéros alphanumériques, le soulignement permet, doit commencer par des lettres.

  • Courriel : format de boîte aux lettres standard.

  • Âge : entier entre 18 et 65 ans.

  • Site Web : Doit être une URL légale et le nom de domaine doit être gitbox.net .

L'exemple de code est le suivant:

 <?php
function validate_username($value) {
    if (preg_match('/^[a-zA-Z][a-zA-Z0-9_]{4,14}$/', $value)) {
        return $value;
    }
    return false;
}

function validate_website($url) {
    // Vérifiez d&#39;abordURLFormat
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }
    // Résoudre la partie du nom de domaine
    $host = parse_url($url, PHP_URL_HOST);
    // Le nom de domaine doit être gitbox.net
    if ($host === 'gitbox.net') {
        return $url;
    }
    return false;
}

$data = [
    'username' => 'User_01',
    'email' => '[email protected]',
    'age' => '30',
    'website' => 'https://gitbox.net/project',
];

$filters = [
    'username' => [
        'filter' => FILTER_CALLBACK,
        'options' => 'validate_username',
    ],
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 18, 'max_range' => 65],
    ],
    'website' => [
        'filter' => FILTER_CALLBACK,
        'options' => 'validate_website',
    ],
];

$result = filter_var_array($data, $filters);

if ($result === false || in_array(false, $result, true)) {
    echo "La vérification des données a échoué\n";
} else {
    echo "La vérification des données a été transmise\n";
    var_dump($result);
}

4. Résumé

  • filter_var_array est un outil puissant pour traiter le filtrage des données par lots.

  • Les filtres intégrés conviennent à la plupart des types de données standard.

  • Filter_Callback peut être combiné avec des fonctions personnalisées pour obtenir une vérification précise des règles complexes.

  • Lorsqu'il est combiné avec une vérification de l'URL, la pièce de nom de domaine peut être filtrée personnalisée à l'aide de PARSE_URL .

La maîtrise de cet ensemble de techniques peut considérablement améliorer la sécurité et la précision des applications PHP lors de la réception et du traitement des données complexes d'entrée utilisateur.