रूबी: सामान्य रूप से ईमेल के बारे में और विशेष रूप से रेगेक्सपी के बिना सत्यापन के लिए

छवि

हाय हमर!

कुछ अवलोकन।



प्रस्तावित प्रश्न पर चर्मपत्र अनुचित रूप से लिखा गया है। फिर भी, मैं वेब विकास के दृष्टिकोण से तीन महत्वपूर्ण, लेकिन उपेक्षित विशेषताओं, ईमेल की विशेषता पर ध्यान देना चाहूंगा।
सबसे पहले, ईमेल एक उपनाम के विपरीत अद्वितीय है, जो आधे मामलों में, हमारे सामने किसी के कब्जे में है। हालांकि, अभी भी एक उपनाम लॉगिन वाली साइटें हैं, जो ऐसी सभी साइटों के लिए भूल नहीं सकती हैं। मैं केवल लॉगिन के लिए ईमेल का उपयोग करने का सुझाव देता हूं।
दूसरे, कुछ डेवलपर्स इस क्षेत्र के खिलाफ जेएस सत्यापनकर्ता सेट होने पर टाइप = 'ईमेल' को अनदेखा करते हैं, और टैबलेट डिवाइस लेआउट को स्विच करते हैं, जो सुविधाजनक है।
तीसरा, यह लेख किस लिए है, इसके लिए हर साल लेख लिखे जाते हैं जैसे "क्यों रेगेक्स को मान्य करना बुरा है", जो एक बुत की तरह है। मुझे उम्मीद है कि Google सही तरीके से अनुक्रमण करेगा।

दरअसल, पूरी प्रस्तावना एक दिलचस्प समाधान के लिए है, जो रूबी-सांख्यिकी की मदद करनी चाहिए, यह संभव है कि अन्य भाषाओं में भी इसी तरह की विधि लागू हो।



दरअसल, जब समस्या पहली बार मेरे सिर में एक समस्या के रूप में तैयार हुई थी, तो मैंने Google का उपयोग किया था, और दो या तीन क्लिकों में मुझे एक समाधान मिला जो मैं अभी भी उपयोग करता हूं। महत्वपूर्ण: निर्णय निष्पक्ष रूप से चोरी हो जाता है और इसे आपके स्वयं के रूप में प्रस्तुत किया जाता है, और यदि कोई स्रोत का लिंक पाता है, तो मैं इसे लेख में ख़ुशी से डालूँगा।

वैधता का पहला सूचक



मणि 'मेल' रूबी लाइब्रेरी जितनी पुरानी है
require 'mail' mail = Mail::Addres.new('antiqe@gmail.com') mail.local #antiqe mail.domain #gmail.com 

यह पहली बात है।
यदि मेल पते में अमान्य वर्ण हैं, तो लायब्रेरी अपवाद छोड़ देगी जिसे पकड़ने की आवश्यकता है। हालाँकि, डोमेन के बारे में हमारे लिए कुछ भी स्पष्ट नहीं है, और यहाँ डोमेन अमान्य हो सकता है।

वैधता का दूसरा सूचक



 mail = Mail::Address.new('antiqe@gmail.com') => #<Mail::Address:72490440 Address: |antiqe@gmail.com| > tree = mail.__send__(:tree) => SyntaxNode+Address1+AddrSpec0 offset=0, "antiqe@gmail.com" (dig_comments,comments,local_part,domain): SyntaxNode+LocalDotAtom0 offset=0, "antiqe" (local_dot_atom_text): SyntaxNode+CFWS1 offset=0, "": SyntaxNode offset=0, "" SyntaxNode offset=0, "" SyntaxNode offset=0, "antiqe": SyntaxNode+LocalDotAtomText0 offset=0, "antiqe" (domain_text): SyntaxNode offset=0, "" SyntaxNode offset=0, "antiqe": SyntaxNode offset=0, "a" SyntaxNode offset=1, "n" SyntaxNode offset=2, "t" SyntaxNode offset=3, "i" SyntaxNode offset=4, "q" SyntaxNode offset=5, "e" SyntaxNode+CFWS1 offset=6, "": SyntaxNode offset=6, "" SyntaxNode offset=6, "" SyntaxNode offset=6, "@" SyntaxNode+DotAtom0 offset=7, "gmail.com" (dot_atom_text): SyntaxNode+CFWS1 offset=7, "": SyntaxNode offset=7, "" SyntaxNode offset=7, "" SyntaxNode offset=7, "gmail.com": SyntaxNode+DotAtomText0 offset=7, "gmail." (domain_text): SyntaxNode offset=7, "gmail": SyntaxNode offset=7, "g" SyntaxNode offset=8, "m" SyntaxNode offset=9, "a" SyntaxNode offset=10, "i" SyntaxNode offset=11, "l" SyntaxNode offset=12, "." SyntaxNode+DotAtomText0 offset=13, "com" (domain_text): SyntaxNode offset=13, "com": SyntaxNode offset=13, "c" SyntaxNode offset=14, "o" SyntaxNode offset=15, "m" SyntaxNode offset=16, "" SyntaxNode+CFWS1 offset=16, "": SyntaxNode offset=16, "" SyntaxNode offset=16, "" 


यहां हमारे पास एक वाक्यविन्यास वृक्ष है, प्रकृति और गुण, मेरे लिए, पूरी तरह से समझ से कम नहीं हैं। मुझे केवल इतना पता है कि सिंजैक्स ट्री, रेगेक्सपी के विपरीत, प्रकृति में पुनरावर्ती नहीं है।
केवल यह मान सकते हैं कि पुस्तकालय के निर्माता कुछ जानते थे, लेकिन सभी को नहीं बताया।
यह पेड़ हमें एक महत्वपूर्ण प्रश्न का उत्तर देने का अवसर देता है: एक डोमेन में कितने तत्व होते हैं। और यदि ऐसे एक से अधिक तत्व हैं, तो डोमेन वैध है।

निजी कार्यान्वयन



रेल में, यह पर्याप्त है:
 require 'mail' class EmailValidator < ActiveModel::EachValidator def validate_each(record,attribute,value) begin address = Mail::Address.new(value) result = address.domain && address.address == value # ,     Mail       email tree = address.__send__(:tree) result &&= (tree.domain.dot_atom_text.elements.size > 1) #    ,       rescue Exception => e #  ,        result = false end record.errors[attribute] << (options[:message] || "is invalid") unless result end end 


किसी भी मॉडल में उपयोग करने के लिए ऐप / वेलिडेटर / email_validator.rb में डालें:

 validates :email, :presence => true, :email => true 


दो से अधिक वर्षों के लिए गलत या गलत सकारात्मक पते की पहचान नहीं की गई है।
ज्यादा कुछ नहीं कहना है।
सभी के लिए अच्छा है।

Source: https://habr.com/ru/post/In175399/


All Articles