C++ में डेटा सत्यापन: लाइब्रेरीज़ और व्यावहारिक दृष्टिकोणों का अवलोकन
डेटा सत्यापन C++ में विश्वसनीय सॉफ़्टवेयर विकास के प्रमुख पहलुओं में से एक है। इनपुट डेटा की सही जाँच रनटाइम त्रुटियों, कमज़ोरियों और अनिर्धारित व्यवहार को रोकने में मदद करती है। डायनामिक टाइपिंग वाली भाषाओं के विपरीत, C++ में डेवलपर को प्रकारों और प्रारूपों के स्पष्ट नियंत्रण की आवश्यकता होती है। इस लेख में, हम मैन्युअल विधियों और विशेष लाइब्रेरीज़ दोनों पर विचार करेंगे जो सत्यापन को सरल बनाती हैं।
1. मैन्युअल सत्यापन: बुनियादी तकनीकें
सबसे सरल तरीका सशर्त ऑपरेटरों का उपयोग करके डेटा की जाँच करना है। यह दृष्टिकोण छोटी परियोजनाओं के लिए अच्छा है, लेकिन जल्दी ही बोझिल हो जाता है।
#include <iostream>#include <string>#include <cctype>
bool validateEmail(const std::string& email) { if (email.empty()) return false; size_t atPos = email.find('@'); if (atPos == std::string::npos || atPos == 0) return false; size_t dotPos = email.rfind('.'); if (dotPos == std::string::npos || dotPos <= atPos + 1) return false; if (dotPos == email.length() - 1) return false; return true;}
int main() { std::string testEmail = "user@example.com"; std::cout << (validateEmail(testEmail) ? "Valid" : "Invalid") << std::endl; return 0;}कमियाँ: रखरखाव में कठिनाई, कोड का दोहराव, एकीकृत इंटरफ़ेस का अभाव।
2. libvalidate लाइब्रेरी
libvalidate C++17 और उससे ऊपर के लिए डेटा के घोषणात्मक सत्यापन के लिए एक हल्की लाइब्रेरी है। यह PHP या Python में वैलिडेटर की तरह चेनिंग शैली में जाँच नियमों का वर्णन करने की अनुमति देती है।
स्थापना
लाइब्रेरी header-only के रूप में वितरित की जाती है। validate.hpp को प्रोजेक्ट में कॉपी करना या CMake के माध्यम से कनेक्ट करना पर्याप्त है:
// FetchContent उदाहरणinclude(FetchContent)FetchContent_Declare(libvalidate GIT_REPOSITORY https://github.com/username/libvalidate.git GIT_TAG v1.0.0)FetchContent_MakeAvailable(libvalidate)उपयोग का उदाहरण
#include "validate.hpp"#include <iostream>#include <string>
int main() { using namespace validate;
// संख्या का सत्यापन (आयु) int age = 25; auto ageResult = check(age) .min(18, "आयु कम से कम 18 वर्ष होनी चाहिए") .max(120, "आयु 120 वर्ष से अधिक नहीं होनी चाहिए");
if (!ageResult.valid()) { std::cerr << ageResult.error() << std::endl; }
// स्ट्रिंग का सत्यापन (पासवर्ड) std::string password = "P@ssw0rd"; auto passResult = check(password) .minLength(8, "पासवर्ड में कम से कम 8 अक्षर होने चाहिए") .matches(R"((?=.*[A-Z])(?=.*[a-z])(?=.*\\d).*)", "पासवर्ड में बड़े, छोटे अक्षर और अंक होने चाहिए");
if (!passResult.valid()) { std::cerr << passResult.error() << std::endl; }
// ऑब्जेक्ट का संयुक्त सत्यापन struct User { std::string name; int age; std::string email; };
User user{"Alice", 30, "alice@example.com"}; auto userResult = check(user) .field(&User::name, "name") .minLength(2) .maxLength(50) .field(&User::age, "age") .range(18, 100) .field(&User::email, "email") .email(); // अंतर्निहित ईमेल जाँच
if (!userResult.valid()) { for (const auto& err : userResult.errors()) { std::cerr << err.field << ": " << err.message << std::endl; } }
return 0;}विशेषताएँ:
- अंतर्निहित नियमों का समर्थन:
min,max,range,email,regex,notEmpty। - कस्टम नियम बनाने की संभावना