2009-07-20 11 views
5

की आवश्यकता है मैं vb.net में एक नियमित अभिव्यक्ति स्ट्रिंग मैच लिखने की कोशिश कर रहा हूं। जिस स्थिति को मैं कार्यान्वित करने की कोशिश कर रहा हूं वह यह है कि स्ट्रिंग में केवल वर्णमाला होनी चाहिए और इसमें निचले और ऊपरी मामले दोनों के कम से कम एक अक्षर होना चाहिए। यानी एएए-असफल, एएए-असफल, एएए-पास।वर्णमाला स्ट्रिंग से मेल खाने के लिए नियमित अभिव्यक्ति और कम से कम एक अपरकेस और एक लोअरकेस (vb.net)

नियमित अभिव्यक्ति है कि मैं के साथ आए हैं है ^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$

कोई एक ही के लिए कुछ बेहतर/आसान नियमित अभिव्यक्ति का सुझाव कर सकते हैं?

+0

क्या होगा यदि मैं इसे थोड़ा अधिक सामान्य बनाना चाहता हूं, जैसा कि अब कहता है कि मुझे एक स्ट्रिंग चाहिए जो एज़ एजेड, 0-9 और @ @ $ .. हो। और इसमें सभी चार और कोई अन्य चरित्र होना चाहिए। क्या मुझे रेगेक्स में सभी क्रमपरिवर्तन टाइप करने की आवश्यकता है? – Shailendra

उत्तर

4

आपके द्वारा बनाई गई रेगेक्स कुछ स्थितियों, जैसे "एएबी" के तहत विफल हो जाएगी। मुझे लगता है कि निम्नलिखित आपके लिए बेहतर काम करेंगे:

^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$ 
+0

नहीं, यह 'एएबी' पर असफल नहीं होगा। मेरा सुझाव है कि आप इसे चलाने का प्रयास करें। – RaYell

+0

मेरी टिप्पणी शैल के मूल regex के बारे में थी, न कि आपके। आपका समाधान सही है। – Templar

+0

ओह, क्षमा करें तो। मैंने देखा कि यह मेरे कुछ मिनट बाद जोड़ा गया था इसलिए मैंने सोचा कि आप इसका जिक्र कर रहे हैं। – RaYell

4

यह रेगुलर एक्सप्रेशन से आप के लिए काम करेंगे:

^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$ 

स्पष्टीकरण: यदि स्ट्रिंग कम से कम एक लोअरकेस और एक अपरकेस अक्षर होना आवश्यक है एक बिंदु है जहां अपरकेस और लोअरकेस वर्णों एक दूसरे के बगल में हैं नहीं है। यह स्थान ([AZ] [az] | [az] [AZ]) से मेल खाता है और यह दोनों मामलों से मेल खाता है: एक जहां अपरकेस चार पहले होता है और जहां यह दूसरा होता है, तो यदि आपके पास यह मानदंड मिले हैं तो आप बस जोड़ सकते हैं स्ट्रिंग के किसी भी छोर पर अपरकेस वर्ण के लोअरकेस की मनमानी संख्या और यह अभी भी

1

बस मस्ती के लिए, मैंने नियमित अभिव्यक्तियों का उपयोग किये बिना आपकी समस्या से निपटने का प्रयास किया।

मैं निम्न विधि जो की जाँच करता है अगर एक स्ट्रिंग मान अक्षर हैं जो निर्दिष्ट यूनिकोड श्रेणियों के अनुरूप होता है (अपरकेस, लोअरकेस, अंकों ...)

Private Function IsValid(ByVal value As String, _ 
         ByVal ParamArray categories As UnicodeCategory()) _ 
         As Boolean 

    'Create a hashset with valid unicode categories 
    Dim validSet = New HashSet(Of UnicodeCategory)(categories) 

    'Group the string value's characters by unicode category 
    Dim groupedCharacters = value.GroupBy(Function(c) Char.GetUnicodeCategory(c)) 

    'Get an enumerable of categories contained in the string value 
    Dim actualCategories = groupedCharacters.Select(Function(group) group.Key) 

    'Return true if the actual categories correspond 
    'to the array of valid categories 
    Return validSet.SetEquals(actualCategories) 
End Function 

विधि इस तरह से इस्तेमाल किया जा सकता:

Dim myString As String = "aAbbC" 
Dim validString As Boolean = IsValid(myString, _ 
            UnicodeCategory.LowercaseLetter, _ 
            UnicodeCategory.UppercaseLetter) 

इस विधि का उपयोग करके, आप कुछ भी बदले बिना अपरकेस, लोअरकेस और अंकों के पात्रों को अनुमति दे सकते हैं। बस IsValid में एक तीसरा तर्क जोड़ें: UnicodeCategory.DecimalDigitNumber

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

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