2013-02-28 3 views
7

मैं कैसे जांचूं कि स्ट्रिंग में केवल नियमित अभिव्यक्तियों का उपयोग करके निर्दिष्ट वर्ण हैं?स्ट्रिंग निर्दिष्ट वर्णों को जांचने के लिए नियमित अभिव्यक्ति

उदाहरण 1: जाँच करें कि स्ट्रिंग केवल पत्र और/या संख्या में शामिल हैं:

मैं क्या करने की कोशिश की:

Regex rgx = new Regex("[^A-Za-z0-9]"); 
string s = "This is a string."; 

if (rgx.IsMatch(s)) 
{ 
    // true 
} 
else 
{ 
    // false; 
} 

यह ऊपर के उदाहरण झूठी लौटना चाहिए (क्योंकि मैं नहीं चाहता अवधि की अनुमति देने के लिए), लेकिन यह सच हो रहा है।

उदाहरण 2: केवल पत्र और/या संख्या और/या रिक्त स्थान और/या कोष्टक अनुमति दी जाती है:

Regex rgx = new Regex("[^A-Za-z0-9() ]"); 
string s = "This is a [string]."; 

if (rgx.IsMatch(s)) 
{ 
    // true 
} 
else 
{ 
    // false; 
} 

फिर, दूसरे उदाहरण लौटना चाहिए झूठी (क्योंकि मैं ब्रैकेट या अवधि की अनुमति नहीं देना चाहते हैं), लेकिन यह सच हो रहा है।

उत्तर

10

आपका रेगेक्स गलत है। क्या आप के लिए

Regex rgx = new Regex("[^A-Za-z0-9]"); 

जाँच कर रहे हैं किसी भी एकल चरित्र है कि एक ASCII ऊपरी या छोटे अक्षर या दशमलव अंकों के अलावा अन्य है से मेल खाएगी। आपको लगता है कि एक स्ट्रिंग होते केवल अक्षरों और संख्याओं का जाँच करना चाहते हैं, तो आप कह सकते हैं:

Regex rx = new Regex("^[A-Za-z0-9]+$"); 

ऊपर नियमित अभिव्यक्ति शुरू की लाइन लंगर (^), एक पत्र या के बाद से मेल खाएगी अंक ([A-Za-z0-9]) 1 या अधिक बार (+) दोहराया गया, इसके बाद एंड-लाइन-एंकर ($)।

किसी को ध्यान रखना चाहिए कि रिक्त स्थान और विराम चिह्न गिनती है: आपके मूल उदाहरण में, परीक्षण स्ट्रिंग एक ऊपरी- या निचले-केस अक्षर या दशमलव अंक के अलावा पाए गए पहले वर्ण से मेल खाती है, एसपी (स्पेस) चरित्र ऑफसेट पर 4।

0

^ आपकी नियमित अभिव्यक्ति में मूल रूप से "नहीं ..." का अर्थ है, इसलिए यह हटाकर कि हमारी अच्छी शुरुआत है। आप यह भी सुनिश्चित करना चाहते हैं कि एक से अधिक वर्णों का तार संभव हो, और बाद में प्लस साइन जोड़कर, हम अभिव्यक्ति को '1 वर्ण या अधिक' के लिए देखने के लिए बताते हैं। और आखिरकार, ब्रैकेट, और $ प्लस साइन के बाद, अभिव्यक्ति को संपूर्ण स्ट्रिंग से मेल खाना चाहिए, न केवल इसके कुछ हिस्सों को जोड़कर।

यही कारण है:

Regex rgx = new Regex("^[A-Za-z0-9() ]+$"); 
0

कैरेट चरित्र (^) इंगित करता है कि आप सभी पात्रों कि कोष्ठक में नहीं हैं मिलान करना चाहते हैं।

पहले उदाहरण में यह अवधि (।) से मेल खाता है।

दूसरे उदाहरण में यह ब्रैकेट ([]) और अवधि (।) से मेल खाता है।

आपको बस अपने तर्क को फ़्लिप करने की आवश्यकता है। यदि कोई सत्य लौटाया जाता है, तो आप जानते हैं कि स्ट्रिंग में अवैध वर्ण हैं।

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