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

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

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

ابدأ الدورة

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



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



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

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

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


1. الوسائل القياسية في C++ (التحقق اليدوي)

النهج الأساسي هو الفحص عبر std::cin، std::string و std::regex. مناسب للسيناريوهات البسيطة.

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

bool validateEmail(const std::string& email) { const std::regex pattern( R"((\\w+)(\\.\\w+)*@(\\w+)(\\.\\w+)+)" ); return std::regex_match(email, pattern);}

int main() { std::string input; std::cout << "أدخل البريد الإلكتروني: "; std::getline(std::cin, input); if (validateEmail(input)) { std::cout << "البريد الإلكتروني صحيح." << std::endl; } else { std::cout << "بريد إلكتروني غير صحيح." << std::endl; } return 0;}

العيوب: يصبح الكود ضخمًا مع القواعد المعقدة، ويصعب صيانته.



2. Boost.LexicalCast و Boost.Conversion

مكتبة Boost تقدم تحويلًا آمنًا للأنواع. على سبيل المثال، boost::lexical_cast يولد استثناءً عند عدم إمكانية التحويل.

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

int main() { std::string str = "123abc"; try { int value = boost::lexical_cast<int>(str); std::cout << "الرقم: " << value << std::endl; } catch (const boost::bad_lexical_cast& e) { std::cerr << "خطأ في التحقق من الصحة: " << e.what() << std::endl; } return 0;}

هذا مناسب لفحص الأرقام، لكنه لا يغطي الهياكل المعقدة.



3. nlohmann/json — التحقق من صحة بيانات JSON

مكتبة nlohmann/json (JSON for Modern C++) تسمح ليس فقط بالتحليل، ولكن أيضًا بفحص هيكل JSON باستخدام المخططات (JSON Schema).

#include <nlohmann/json.hpp>#include <iostream>

using json = nlohmann::json;

int main() { std::string input = R"({"name": "Alice", "age": 25})"; json data = json::parse(input); // التحقق من وجود الحقول if (data.contains("name") && data["name"].is_string()) { std::cout << "الاسم: " << data["name"] << std::endl; } else { std::cerr << "حقل name غير موجود أو ليس سلسلة نصية." << std::endl; } // التحقق من صحة العمر (عدد صحيح، > 0) if (data.contains("age") && data["age"].is_number_integer()) { int age = data["age"]; if (age > 0 && age < 150) { std::cout << "العمر: " << age << std::endl; } else { std::cerr << "العمر خارج النطاق المسموح به." << std::endl; } } else { std::cerr << "حقل age غير موجود أو ليس عددًا صحيحًا." << std::endl; } return 0;}

للتحقق الكامل من الصحة وفقًا لمخطط، يمكن استخدام nlohmann::json_schema (يتطلب تضمينًا منفصلًا).

توصيات