JavaScript में Email वैलिडेशन: कोड एनालिसिस और बेस्ट प्रैक्टिसेज

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript में Email वैलिडेशन: सरल Regex से लेकर डीप कोड एनालिसिस तक

\n\n

हर डेवलपर ने कभी न कभी यह सवाल पूछा ही होगा: "How can I validate an email address in JavaScript?"। Stack Overflow पर इस सवाल के हजारों व्यूज और सैकड़ों जवाब हैं, क्योंकि यह विषय छोटी-छोटी बारीकियों से भरा हुआ है। आज हम सिर्फ रेडीमेड कोड नहीं देंगे, बल्कि गहराई में जाकर समझेंगे: क्यों एक साधारण चेक a@b को पास कर सकता है या "test@[IPv6:2001:db8::1]" को ब्लॉक कर सकता है। चलिए शुरू करते हैं!

\n\n

क्यों "सिर्फ Regex" एक बुरा आइडिया है?

\n\n

इंटरनेट पर सबसे लोकप्रिय समाधान है - एक रेगुलर एक्सप्रेशन कॉपी करना। लेकिन सच कहूं तो: email एड्रेस एक अफरा-तफरी हैं। RFC 5321 और RFC 5322 स्पेसिफिकेशन में +, -, ., % और यहां तक कि ब्रैकेट में कमेंट्स की अनुमति है। साथ ही museum जैसे डोमेन या @[192.168.1.1] जैसे आईपी एड्रेस भी होते हैं। इन सबको एक regex लाइन में फिट करने की कोशिश करेंगे तो या तो वैलिड एड्रेस छूट जाएगा या असली यूजर ब्लॉक हो जाएगा।

\n\n

यहां एक उदाहरण है जो Stack Overflow पर अक्सर मिलता है:

\n\n
const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;
\n\n

यह कोड 90% मामलों में काम करता है, लेकिन:

\n
    \n
  • test@localhost को पास कर देता है (लोकल नेटवर्क के लिए वैलिड)
  • \n
  • "test@[192.168.1.1]" को ब्लॉक कर देता है (RFC के अनुसार वैलिड)
  • \n
  • डोमेन की लंबाई या डॉट्स की जांच नहीं करता
  • \n
\n\n

नैतिकता: परफेक्ट regex लिखने की कोशिश न करें। बेहतर है सिंपल चेक + सर्वर-साइड वैलिडेशन का कॉम्बिनेशन इस्तेमाल करें।

\n\n

Email एड्रेस की एनाटॉमी: कोड लिखने से पहले जानने योग्य बातें

\n\n

वैलिडेटर लिखने से पहले, स्पेसिफिकेशन के अनुसार email की संरचना समझ लेते हैं:

\n\n
    \n
  • लोकल पार्ट (@ से पहले): इसमें अक्षर, अंक, डॉट्स, प्लस, हाइफन हो सकते हैं, लेकिन डॉट से शुरू या खत्म नहीं हो सकता। स्पेशल कैरेक्टर्स के लिए कोट्स की अनुमति है।
  • \n
  • डोमेन (@ के बाद): डॉट्स से अलग किए गए लेबल से बना होता है। हर लेबल 1 से 63 कैरेक्टर का होता है। डोमेन स्क्वायर ब्रैकेट में IP एड्रेस भी हो सकता है।
  • \n
  • कुल लंबाई: 254 कैरेक्टर से अधिक नहीं होनी चाहिए।
  • \n
\n\n

यह जानकारी होने पर हम एक बेहतर और समझदारी वाली चेक लिख सकते हैं।

\n\n

स्टेप 1: सरल लेकिन काम करने वाला वैलिडेशन (99% मामलों के लिए)

\n\n

चलिए उस कोड से शुरू करते हैं जो प्रोडक्शन प्रोजेक्ट्स (जैसे Angular या React) में इस्तेमाल होता है। यह परफेक्ट नहीं है, लेकिन ज्यादातर फॉर्म्स के लिए काफी है:

\n\n
function isEmailSimple(email) {\n    // स्पेस हटाएं\n    const trimmed = email.trim();\n    \n    // खाली स्ट्रिंग की जांच\n    if (!trimmed) return false;\n    \n    // बेसिक स्ट्रक्चर: कुछ @ कुछ . कुछ\n    const atIndex = trimmed.lastIndexOf('@');\n    if (atIndex < 1 || atIndex === trimmed.length - 1) return false;\n    \n    const localPart = trimmed.slice(0, atIndex);\n    const domain = trimmed.slice(atIndex + 1);\n    \n    // डोमेन में कम से कम एक डॉट होना चाहिए\n    const dotIndex = domain.lastIndexOf('.');\n    if (dotIndex < 1 || dotIndex === domain.length - 1) return false;\n    \n    // लंबाई की जांच\n    if (trimmed.length > 254) return false;\n    if (localPart.length > 64) return false;\n    \n    return true;\n}\n\n// उदाहरण:\nconsole.log(isEmailSimple('user@example.com')); // true\nconsole.log(isEmailSimple('a@b.c')); // true (औपचारिक रूप से वैलिड)\nconsole.log(isEmailSimple('user@localhost')); // false (कोई डॉट नहीं)\nconsole.log(isEmailSimple('@example.com')); // false\n
\n\n

यह कोड ब्लाइंड regex से बेहतर है। यह स्ट्रक्चर, लंबाई और @ व डॉट की मौजूदगी की जांच करता है। लेकिन यह user@[192.168.1.1] को पास कर देगा - ज्यादातर वेब फॉर्म्स के लिए यह कोई बड़ी बात नहीं है।

\n\n

स्टेप 2: RFC के अनुसार एडवांस्ड वैलिडेशन (लगभग ब्राउज़र जैसा)

\n\n

आधुनिक ब्राउज़र type="e

ब्लॉग

पुस्तक अनुशंसाएँ