C++ में डेटा सत्यापन: उपकरणों और दृष्टिकोणों का अवलोकन
\n\nडेटा सत्यापन C++ में किसी भी एप्लिकेशन के विकास का एक महत्वपूर्ण चरण है। गलत इनपुट डेटा अनिश्चित व्यवहार, कमजोरियों (जैसे buffer overflow) या तार्किक त्रुटियों का कारण बन सकता है। इस लेख में, हम C++ इकोसिस्टम में उपलब्ध डेटा जाँच के लिए मुख्य लाइब्रेरीज़ और विधियों पर विचार करेंगे।
\n\nसत्यापन की आवश्यकता क्यों है?
\nसत्यापन के मुख्य उद्देश्य:
\n- \n
- सुरक्षा — हमलों को रोकना (SQL-इंजेक्शन, बफर ओवरफ्लो)। \n
- अखंडता — यह सुनिश्चित करना कि डेटा अपेक्षित प्रारूप (संख्या, तिथियाँ, ईमेल) से मेल खाता है। \n
- स्थिरता — गलत इनपुट के कारण क्रैश से बचना। \n
1. C++ के मानक साधन (मैन्युअल सत्यापन)
\nमूल दृष्टिकोण — std::cin, std::string और std::regex के माध्यम से जाँच। सरल परिदृश्यों के लिए उपयुक्त।
#include <iostream>\n#include <regex>\n#include <string>\n\nbool validateEmail(const std::string& email) {\n const std::regex pattern(\n R"((\\w+)(\\.\\w+)*@(\\w+)(\\.\\w+)+)"\n );\n return std::regex_match(email, pattern);\n}\n\nint main() {\n std::string input;\n std::cout << "ईमेल दर्ज करें: ";\n std::getline(std::cin, input);\n \n if (validateEmail(input)) {\n std::cout << "ईमेल सही है।" << std::endl;\n } else {\n std::cout << "गलत ईमेल।" << std::endl;\n }\n return 0;\n}\nकमियाँ: जटिल नियमों के साथ कोड बोझिल हो जाता है, रखरखाव कठिन होता है।
\n\n2. Boost.LexicalCast और Boost.Conversion
\nBoost लाइब्रेरी सुरक्षित प्रकार रूपांतरण प्रदान करती है। उदाहरण के लिए, boost::lexical_cast रूपांतरण असंभव होने पर अपवाद उत्पन्न करता है।
#include <boost/lexical_cast.hpp>\n#include <iostream>\n\nint main() {\n std::string str = "123abc";\n try {\n int value = boost::lexical_cast<int>(str);\n std::cout << "संख्या: " << value << std::endl;\n } catch (const boost::bad_lexical_cast& e) {\n std::cerr << "सत्यापन त्रुटि: " << e.what() << std::endl;\n }\n return 0;\n}\nयह संख्याओं की जाँच के लिए सुविधाजनक है, लेकिन जटिल संरचनाओं को कवर नहीं करता।
\n\n3. nlohmann/json — JSON डेटा का सत्यापन
\nnlohmann/json लाइब्रेरी (JSON for Modern C++) न केवल पार्स करने की अनुमति देती है, बल्कि स्कीमा (JSON Schema) का उपयोग करके JSON संरचना की जाँच भी करती है।
\n#include <nlohmann/json.hpp>\n#include <iostream>\n\nusing json = nlohmann::json;\n\nint main() {\n std::string input = R"({"name": "Alice", "age": 25})";\n json data = json::parse(input);\n \n // फ़ील्ड की उपस्थिति की जाँच\n if (data.contains("name") && data["name"].is_string()) {\n std::cout << "Name: " << data["name"] << std::endl;\n } else {\n std::cerr << "name फ़ील्ड अनुपस्थित है या स्ट्रिंग नहीं है।" << std::endl;\n }\n \n // आयु का सत्यापन (पूर्णांक, > 0)\n if (data.contains("age") && data["age"].is_number_integer()) {\n int age = data["age"];\n if (age > 0 && age < 150) {\n std::cout << "Age: " << age << std::endl;\n } else {\n std::cerr << "आयु स्वीकार्य सीमा से बाहर है।" << std::endl;\n }\n } else {\n std::cerr << "age फ़ील्ड अनुपस्थित है या पूर्णांक नहीं है।" << std::endl;\n }\n return 0;\n}\nस्कीमा के अनुसार पूर्ण सत्यापन के लिए nlohmann::json_schema का उपयोग किया जा सकता है (अलग से शामिल करना आवश्यक है)।