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" फ़ील्ड की उपस्थिति की जाँच करें, जो स्ट्रिंग प्रकार का हो 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;}दृष्टिकोणों की तुलना
उपकरण का चयन