RegEx यह सुनिश्चित करने के लिए कि स्ट्रिंग में कम से कम एक केस चार, ऊपरी केस चार, अंक और प्रतीक शामिल हैं


156

यह सुनिश्चित करने के लिए कि क्या दिए गए स्ट्रिंग में निम्न श्रेणियों में से प्रत्येक से कम से कम एक वर्ण शामिल है regex क्या है।

  • छोटे अक्षर की लिपि
  • अपरकेस अक्षर
  • अंक
  • प्रतीक

मैं अलग-अलग सेट के लिए पैटर्न अर्थात् पता [a-z], [A-Z], \dऔर _|[^\w](मैं उन्हें सही मिल गया मुझे नहीं, था?)।

लेकिन मैं यह सुनिश्चित करने के लिए उन्हें कैसे जोड़ती हूं कि स्ट्रिंग में किसी भी क्रम में ये सभी शामिल हैं?


क्या मंच / रेगेक्स-बोली? बार्ट का उत्तर सही है, लेकिन उदाहरण के लिए लुकअहेड दावे जावास्क्रिप्ट में विश्वसनीय नहीं हैं।
बोबिन्स

विशेष रूप से कहीं नहीं - मैं regex सीख रहा हूं। क्या कोई विकल्प है जो जावास्क्रिप्ट में उपयोग किया जा सकता है?
अमरघोष

@ बब्बन अरे, मैं यह जानने की कोशिश कर रहा हूं कि लुकहैड के दावे जावास्क्रिप्ट में विश्वसनीय क्यों नहीं हैं। क्या इस पर कोई राइटअप है?
क्रिस बिएर

@ क्रिस: एक बहुत भ्रामक IE / JScript बग: blog.stevenlevithan.com/archives/regex-lookahead-bug
bobince

जवाबों:


349

यदि आपको एक एकल रेगेक्स की आवश्यकता है, तो प्रयास करें:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

एक संक्षिप्त विवरण:

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists

और मैं साइलेंटगॉस्ट से सहमत हूं, \Wथोड़ा व्यापक हो सकता है। मैं इसे इस तरह सेट एक चरित्र के साथ बदल दूँगा: [-+_!@#$%^&*.,?](बेशक अधिक जोड़ने के लिए स्वतंत्र महसूस करें!)


अगर मैं अंतिम .+को बदल दूं तो क्या होगा .*? मैं एक परीक्षण के मामले के साथ नहीं आ सका जो कि विफल रहता है .*। क्या वे इस संदर्भ में समान हैं? "शून्य या अधिक वर्ण" ठीक प्रतीत होता है - केवल पुष्टि की तलाश में।
अमरघोष

@ अमरघोष: इस मामले में, इससे कोई फर्क नहीं पड़ता। पॉजिटिव लुक-अहीड्स के कारण, स्ट्रिंग में पहले से ही कम से कम 4 अक्षर होते हैं। तो यह परिवर्तन करने के लिए कोई फर्क नहीं पड़ता .+में .*या यहाँ तक कि .{4,}उस बात के लिए।
बार्ट कीर्स

यदि आप थोड़ा स्पष्टीकरण जोड़ने के लिए तैयार होंगे, तो मुझे यह समझने में परेशानी हो रही है कि इन लुकहेड्स के संयोजन की गारंटी है कि प्रत्येक वर्ण सेट में से कम से कम 1 मौजूद होगा
Sharlike

@ इसी तरह, मुझे नहीं पता कि इसे कैसे फिर से लिखना है ताकि इसे समझने में आसानी हो। खासकर इन छोटे कमेंट-बॉक्स में। मैं आपको इसे पढ़ने की सलाह देता हूं: regular-expressions.info/lookaround.html और यदि आपके पास अभी भी सवाल है, तो बस अपना खुद का एक प्रश्न पोस्ट करें। सौभाग्य!
बार्ट कीर्स जूल

4
@ikertxu, कुछ इस तरह की कोशिश करें:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
बार्ट

20

बार्ट कीर्स, आपके रेगेक्स में कुछ मुद्दे हैं। सबसे अच्छा तरीका यह है कि:

(.*[a-z].*)       // For lower cases
(.*[A-Z].*)       // For upper cases
(.*\d.*)          // For digits

इस तरह से आप शुरुआत में या अंत में कोई बात नहीं खोज रहे हैं। आपके पास मेरे पास जटिल पासवर्डों के साथ बहुत सारी समस्याएं हैं।


5
आप ओपी के अनुरोध के अनुसार प्रतीकों की जांच नहीं कर रहे हैं।
कासिमिर

5

आप उन तीन समूहों को अलग-अलग मिला सकते हैं, और सुनिश्चित कर सकते हैं कि वे सभी उपस्थित हों। इसके अलावा, [^\w]थोड़ा बहुत व्यापक लगता है, लेकिन अगर आप चाहते हैं कि आप इसे बदलना चाहते हैं \W


धन्यवाद। मैं \ W से अवगत नहीं था। बस यह पता लगाने के लिए कि यह वर्ड से मेल नहीं खाता है। क्या \ W और [\ W] में कोई अंतर है? क्या [\ W] सिर्फ बेमानी है?
अमरघोष

@Amarghosh, हाँ, \Wऔर [\W]उसी में परिणाम।
बार्ट कीर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.