التحقق من صحة البيانات في C++: المكتبات والأنماط وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التحقق من صحة البيانات في C++: نظرة عامة على المكتبات وأمثلة عملية

في التطوير الحديث بلغة C++، يعد التحقق من صحة البيانات إحدى المراحل الأساسية لمعالجة إدخال المستخدم أو طلبات الشبكة أو ملفات التكوين. بدون تحقق موثوق، يصبح التطبيق عرضة للبيانات غير الصحيحة، مما قد يؤدي إلى أعطال أو تسرب للذاكرة أو أخطاء منطقية. في هذه المقالة، سنستعرض الأساليب الرئيسية والمكتبات الشائعة للتحقق من صحة البيانات في C++.



لماذا نحتاج إلى التحقق من الصحة؟

يحقق التحقق من الصحة ثلاثة أهداف رئيسية:

  • الأمان — منع إدخال البيانات الضارة (حقن SQL، تجاوز سعة المخزن المؤقت).
  • الصحة — ضمان أن البيانات تتوافق مع التنسيق المتوقع (البريد الإلكتروني، رقم الهاتف، العمر).
  • الاستقرار — استبعاد الأعطال عند تحويل الأنواع (على سبيل المثال، سلسلة نصية إلى رقم).


مكتبات التحقق من الصحة في C++

دعنا نستعرض بعض الحلول الشائعة التي يمكن استخدامها في مشاريع C++.



1. Boost.LexicalCast — تحقق بسيط من الأرقام

تتيح مكتبة Boost.LexicalCast تحويل السلاسل النصية إلى أرقام والعكس بأمان. عند حدوث خطأ، يتم إلقاء استثناء boost::bad_lexical_cast.

#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 — التحقق من صحة هياكل JSON

للتحقق من بيانات JSON، غالبًا ما تُستخدم المكتبة خفيفة الوزن PicoJSON. تتيح تحليل JSON والتحقق من وجود الحقول الإلزامية.

#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>(); // التحقق من وجود حقل "name" من نوع string if (obj.count("name") == 0 || !obj["name"].is<std::string>()) return false; // التحقق من حقل "age" — يجب أن يكون رقمًا وأكبر من 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 (تطبيق مخصص)

إذا كنت بحاجة إلى قاعدة تحقق مرنة، يمكنك تنفيذ فئة مدقق خاصة بك. مثال للتحقق من عنوان البريد الإلكتروني:

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

class EmailValidator {public: bool validate(const std::string& email) const { // تعبير عادي بسيط للبريد الإلكتروني 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;}


مقارنة الأساليب

اختيار الأداة

توصيات