2011-01-08 22 views
10

मैं Regexp जरूरत स्ट्रिंग मान्य करने के लिए जाँच न्यूनतम लंबाई 6 है और यह कम से कम एक गैर अक्षरांकीय चरित्र, उदा, शामिल है: "eN%{S$u)", "h9YI!>4j", "{9YI!;4j", "eN%{S$usdf)", "dfh9YI!>4j", "ghffg{9YI!;4j"नेट नियमित अभिव्यक्ति जो लंबाई और गैर अक्षरांकीय अक्षर

यह एक अच्छी तरह से काम कर रहा है ^.*(?=.{6,})(?=.*\\d).*$" लेकिन ऐसे मामलों में जब स्ट्रिंग में कोई संख्या नहीं है (उदाहरण "eN%{S$u)") यह काम नहीं कर रहा है।

उत्तर

10
^(?=.{6})(.*[^0-9a-zA-Z].*)$ 

हम कम से कम 6 वर्णों को आश्वस्त करने के लिए सकारात्मक लुकहेड का उपयोग करते हैं। फिर हम उस पैटर्न से मेल खाते हैं जो कम से कम एक गैर-अल्फान्यूमेरिक वर्ण ([^0-9a-zA-Z]) ढूंढता है। .* के इस एक गैर अक्षरांकीय चरित्र के आसपास किसी भी वर्णों की संख्या से मेल खाते हैं, लेकिन समय हम यहाँ पहुँच गए हैं हम पहले से ही देख लिया है के द्वारा हम मिलान कर रहे हैं कि कम से कम 6.

^.*(?=.{6,})(?=.*\\d).*$" 

है रेगेक्स आपने कोशिश की। यहां कुछ सुझाव दिए गए हैं:

  • आपको लुकहेड में 6 से अधिक वर्णों से मेल खाने की आवश्यकता नहीं है। यहां केवल 6 मिलान करने से शेष नियमित अभिव्यक्ति को 6 से अधिक मिलान से प्रतिबंधित नहीं किया जाता है।
  • \d एक अंक से मेल खाता है, और (?=.*\\d) उनमें से एक के लिए एक लुकहेड है। यही कारण है कि आप eN%{S$u) जैसे तारों के साथ उल्लिखित समस्याओं का सामना कर रहे हैं।
  • भले ही ऊपर दिया गया बिंदु गलत नहीं था और यहां नियमित अभिव्यक्ति सही थी, तो आप .* के साथ दूसरे लुकहेड को जोड़ सकते हैं जो कि .*\\d.* का उपयोग करके निम्नानुसार है।
1

इसे आसान रखें।

// long enough and contains something not digit or a-z 
x.Length >= 6 && Regex.IsMatch(x, @"[^\da-zA-Z]") 

हैप्पी कोडिंग।

संपादित करें, शुद्ध "रेगुलर एक्सप्रेशन":

यह पहला दावा है वहाँ देखो आगे में कुछ भी करने के 6 पत्र हैं, और फिर यह सुनिश्चित करता है कि वहाँ कुछ है कि अल्फा नहीं है कि देखो आगे के भीतर संख्यात्मक (यह मिलान करने की कोशिश कर रहे पहले 5 वर्णों तक "फेंक देगा")।

(?=.{6}).{0,5}[^\da-zA-Z] 
+0

मैं कॉन्फ़िगरेशन फ़ाइल में regexps रख रहा हूं, मैं ऐसा नहीं कर सकता। – Reg

+0

यह इनपुट विफल रहता है: 'lucero-1' – Lucero

+0

@ लुसेरो फिर से जांचें। वह इनपुट विफल नहीं होता है। यह नियमित अभिव्यक्ति को पास करता है, जैसा कि आवश्यकताओं में बताया गया है - "स्ट्रिंग में न्यूनतम लंबाई 6 है और इसमें कम से कम एक गैर-अल्फान्यूमेरिक वर्ण शामिल है"। इस मामले में "-" दूसरी आवश्यकता को पूरा करता है और, ठीक है, लंबाई पहले। आपके जवाब में अच्छा उलटा, बीटीडब्ल्यू। –

0

क्या इस बारे में (निर्धारित): ^(?=.{6})(.*[^\w].*)$

इस चेक बाहर http://www.ultrapico.com/Expresso.htm यह जो आप regexps सीखने में एक बहुत मदद कर सकता है शांत उपकरण है।

+0

इनपुट पर जांच करें '! @ # $% ^' –

+0

ऐसा लगता है कि अभिव्यक्ति किसी भी तरह टूट गई थी (मैं अभिव्यक्ति के लिए अपने संबंधित स्थानों पर कुछ '। *' और '\ w' देखने की अपेक्षा करता हूं। सही बात)। – Lucero

+0

आपने अपने संपादन में से एक में बैकस्लैश गिरा दिया। '[^ w]' या तो '[^ \ w]' या '\ W' होना चाहिए। –

3

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

^(?=.*?[^0-9a-zA-Z]).{6} 

तो अगर आप उल्लेख अतिरिक्त शर्त जोड़ने के लिए थे, इसे इस तरह होगा:

^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6} 

आप देख सकते हैं, इस पैटर्न आसानी से एक्स्टेंसिबल है।ध्यान दें कि केवल मैचों की जांच के लिए इस्तेमाल किया गया है, इसका कैप्चर उपयोगी नहीं है।

संबंधित मुद्दे