2010-07-20 10 views
5

की सामग्री की जांच करें मैं कैसे जांच सकता हूं कि मेरा इनपुट एक विशेष प्रकार की स्ट्रिंग है या नहीं। तो कोई संख्यात्मक, नहीं "/", ...स्ट्रिंग इनपुट

+0

डी ओ आप किसी भी मौके से स्ट्रिंग के बजाय वर्णमाला (केवल अक्षरों) का मतलब है? – BoltClock

+1

क्या आपका मतलब है, "मैं कैसे जांच सकता हूं कि स्ट्रिंग में केवल वर्ण हैं या नहीं?" –

+1

क्या आपका मतलब केवल एक अल्फा-न्यूमेरिक वर्णों वाली स्ट्रिंग है? क्या आप परिभाषित कर सकते हैं कि कौन से पात्र वास्तव में हैं? –

उत्तर

15

ठीक है, यह देखना होगा कि एक इनपुट वास्तव में प्रकार System.String की एक वस्तु है, तो आप बस कर सकते हैं:

bool IsString(object value) 
{ 
    return value is string; 
} 

जांच करने के लिए है कि एक string केवल अक्षर शामिल हैं, तो आप इस तरह कुछ कर सकता है:

bool IsAllAlphabetic(string value) 
{ 
    foreach (char c in value) 
    { 
     if (!char.IsLetter(c)) 
      return false; 
    } 

    return true; 
} 

आप इन गठबंधन करने के लिए करना चाहता था, तो आप ऐसा कर सकता है:

bool IsAlphabeticString(object value) 
{ 
    string str = value as string; 
    return str != null && IsAllAlphabetic(str); 
} 
+1

दोनों का अच्छा उदाहरण, यह है कि शीर्षक और प्रश्न बिल्कुल मेल नहीं खाते हैं। – corsiKa

6

यह पूरी तरह से स्पष्ट नहीं है कि आप क्या चाहते हैं, लेकिन आप शायद इसे नियमित अभिव्यक्ति के साथ कर सकते हैं। उदाहरण के लिए देखना होगा कि आपकी स्ट्रिंग az या AZ में केवल अक्षर आप ऐसा कर सकते हैं शामिल हैं:

string s = "dasglakgsklg"; 
if (Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase)) 
{ 
    Console.WriteLine("Only letters in a-z."); 
} 
else 
{ 
    // Not only letters in a-z. 
} 

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

आप [a-z] के बजाय \p{L} का उपयोग किसी भी यूनिकोड चरित्र से मेल खाने के लिए भी कर सकते हैं, जिसे अक्षरों में अक्षरों सहित अक्षरों को शामिल किया जाता है।

1

ऐसा कुछ (परीक्षण नहीं किया गया है) आपकी (अस्पष्ट) आवश्यकता को फिट कर सकता है।

if (input is string) 
{ 
    // test for legal characters? 
    string pattern = "^[A-Za-z]+$"; 
    if (Regex.IsMatch(input, pattern)) 
    { 
     // legal string? do something 
    } 

    // or 
    if (input.Any(c => !char.IsLetter(c))) 
    { 
     // NOT legal string 
    } 
} 
2
using System.Linq; 
... 

bool onlyAlphas = s.All(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); 
+1

+1! क्रूर होने के लिए – Aren

+1

-1 क्रूर – Luiscencio

+0

मुझे गलत मत समझें: रेगेक्स के इसका उपयोग है। लेकिन इस तरह के एक सरल, एकल-पास एल्गोरिदम के लिए, यह अधिक है। मुझे रीड का जवाब और भी पसंद है, हालांकि। 'Char.IsLetter' के बारे में नहीं पता था। – StriplingWarrior

10

यदि आप मतलब है "स्ट्रिंग पूरी तरह से पत्र है", तुम कर सकते हो:

string myString = "RandomStringOfLetters"; 
bool allLetters = myString.All(c => Char.IsLetter(c)); 

यह LINQ और Char.IsLetter पद्धति पर आधारित है।

+1

यह अच्छा है =) – Luiscencio

+0

Char.IsLetter स्थानीयकरण के साथ कैसे काम करता है? – ahsteele

+0

@ahsteele: यह वास्तव में सिस्टम। ग्लोबलाइजेशन।गैर लैटिन वर्णों के लिए इसे संभालने के लिए CharUnicodeInfo। –

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