Datenvalidierung in C++: Bibliotheken, Muster und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in C++: Überblick über Bibliotheken und praktische Beispiele

In der modernen C++-Entwicklung ist die Datenvalidierung einer der wichtigsten Schritte bei der Verarbeitung von Benutzereingaben, Netzwerkanfragen oder Konfigurationsdateien. Ohne zuverlässige Prüfung wird die Anwendung anfällig für fehlerhafte Daten, was zu Abstürzen, Speicherlecks oder logischen Fehlern führen kann. In diesem Artikel betrachten wir die grundlegenden Ansätze und beliebten Bibliotheken zur Datenvalidierung in C++.



Warum ist Validierung notwendig?

Validierung löst drei Hauptaufgaben:

  • Sicherheit — Verhinderung der Eingabe schädlicher Daten (SQL-Injection, Pufferüberlauf).
  • Korrektheit — Garantie, dass die Daten dem erwarteten Format entsprechen (E-Mail, Telefonnummer, Alter).
  • Stabilität — Ausschluss von Fehlern bei der Typkonvertierung (z. B. Zeichenkette in Zahl).


Bibliotheken für die Validierung in C++

Betrachten wir einige beliebte Lösungen, die in C++-Projekten verwendet werden können.



1. Boost.LexicalCast — einfache Zahlenprüfung

Die Bibliothek Boost.LexicalCast ermöglicht die sichere Umwandlung von Zeichenketten in Zahlen und umgekehrt. Bei einem Fehler wird eine Ausnahme boost::bad_lexical_cast ausgelöst.

#include <boost/lexical_cast.hpp>#include <iostream>#include <string>

bool isValidNumber(const std::string& input) { try { int value = boost::lexical_cast<int>(input); return (value >= 0 && value <= 100); } catch (const boost::bad_lexical_cast&) { return false; }}

int main() { std::cout << isValidNumber("50") << std::endl; // 1 std::cout << isValidNumber("abc") << std::endl; // 0 return 0;}


2. PicoJSON — Validierung von JSON-Strukturen

Zur Überprüfung von JSON-Daten wird häufig die leichtgewichtige Bibliothek PicoJSON verwendet. Sie ermöglicht das Parsen von JSON und die Prüfung auf erforderliche Felder.

#include "picojson.h"#include <iostream>#include <string>

bool validateUserJSON(const std::string& jsonStr) { picojson::value val; std::string err = picojson::parse(val, jsonStr); if (!err.empty()) return false;

picojson::object& obj = val.get<picojson::object>(); // Prüfen auf Vorhandensein des Feldes "name" vom Typ string if (obj.count("name") == 0 || !obj["name"].is<std::string>()) return false; // Prüfen des Feldes "age" — muss eine Zahl sein und > 0 if (obj.count("age") == 0 || !obj["age"].is<double>()) return false; double age = obj["age"].get<double>(); if (age <= 0 || age > 150) return false; return true;}

int main() { std::string valid = R"({"name":"Alice","age":30})"; std::string invalid = R"({"name":"Bob","age":-5})"; std::cout << validateUserJSON(valid) << std::endl; // 1 std::cout << validateUserJSON(invalid) << std::endl; // 0 return 0;}


3. Validator-Muster (eigene Implementierung)

Wenn eine flexible Validierungsregel benötigt wird, kann eine eigene Validator-Klasse implementiert werden. Beispiel für die Überprüfung einer E-Mail-Adresse:

#include <regex>#include <string>#include <iostream>

class EmailValidator {public: bool validate(const std::string& email) const { // Einfachster regulärer Ausdruck für E-Mail static const std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})"); return std::regex_match(email, pattern); }};

int main() { EmailValidator ev; std::cout << ev.validate("user@example.com") << std::endl; // 1 std::cout << ev.validate("invalid-email") << std::endl; // 0 return 0;}


Vergleich der Ansätze

Die Wahl des Werkzeugs

Empfehlungen