Validation des données en C++ : bibliothèques et méthodes (libvalidate, nlohmann/json, Boost)

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Validation des données en C++ : aperçu des bibliothèques et des approches pratiques



La validation des données est l'un des aspects clés du développement de logiciels fiables en C++. Une vérification correcte des données d'entrée permet de prévenir les erreurs d'exécution, les vulnérabilités et les comportements indéfinis. Contrairement aux langages à typage dynamique, le C++ exige du développeur un contrôle explicite des types et des formats. Dans cet article, nous examinerons à la fois les méthodes manuelles et les bibliothèques spécialisées qui simplifient la validation.



1. Validation manuelle : techniques de base



La méthode la plus simple consiste à vérifier les données à l'aide d'instructions conditionnelles. Cette approche convient aux petits projets, mais devient rapidement lourde.



#include <iostream>#include <string>#include <cctype>

bool validateEmail(const std::string& email) { if (email.empty()) return false; size_t atPos = email.find('@'); if (atPos == std::string::npos || atPos == 0) return false; size_t dotPos = email.rfind('.'); if (dotPos == std::string::npos || dotPos <= atPos + 1) return false; if (dotPos == email.length() - 1) return false; return true;}

int main() { std::string testEmail = "user@example.com"; std::cout << (validateEmail(testEmail) ? "Valide" : "Invalide") << std::endl; return 0;}


Inconvénients : complexité de maintenance, duplication de code, absence d'interface unifiée.



2. Bibliothèque libvalidate



libvalidate est une bibliothèque légère pour la validation déclarative des données en C++17 et versions ultérieures. Elle permet de décrire les règles de vérification dans un style chaîné, rappelant les validateurs en PHP ou Python.



Installation

La bibliothèque est distribuée en tant que header-only. Il suffit de copier validate.hpp dans le projet ou de l'inclure via CMake :

# Exemple FetchContentinclude(FetchContent)FetchContent_Declare(libvalidate    GIT_REPOSITORY https://github.com/username/libvalidate.git    GIT_TAG v1.0.0)FetchContent_MakeAvailable(libvalidate)


Exemple d'utilisation

#include "validate.hpp"#include <iostream>#include <string>

int main() { using namespace validate;

// Validation d'un nombre (âge) int age = 25; auto ageResult = check(age) .min(18, "L'âge doit être d'au moins 18 ans") .max(120, "L'âge ne doit pas dépasser 120 ans");

if (!ageResult.valid()) { std::cerr << ageResult.error() << std::endl; }

// Validation d'une chaîne (mot de passe) std::string password = "P@ssw0rd"; auto passResult = check(password) .minLength(8, "Le mot de passe doit contenir au moins 8 caractères") .matches(R"((?=.*[A-Z])(?=.*[a-z])(?=.*\\d).*)", "Le mot de passe doit contenir des majuscules, des minuscules et des chiffres");

if (!passResult.valid()) { std::cerr << passResult.error() << std::endl; }

// Validation combinée d'un objet struct User { std::string name; int age; std::string email; };

User user{"Alice", 30, "alice@example.com"}; auto userResult = check(user) .field(&User::name, "name") .minLength(2) .maxLength(50) .field(&User::age, "age") .range(18, 100) .field(&User::email, "email") .email(); // vérification email intégrée

if (!userResult.valid()) { for (const auto& err : userResult.errors()) { std::cerr << err.field << ": " << err.message << std::endl; } }

return 0;}


Caractéristiques :

  • Prise en charge de règles intégrées : min, max, range, email, regex, notEmpty.
  • Possibilité de créer

Recommendations