2010-03-26 10 views
21

मैं यह जानना चाहता हूं कि स्ट्रिंग में कोई विशेष वर्ण शामिल है जैसे!, @, #, $,%, ^, &, *, (,) .... आदि।कैसे पता चलता है कि स्ट्रिंग में कोई विशेष वर्ण है या नहीं?

स्ट्रिंग में सभी वर्णों को लूपिंग किए बिना मैं ऐसा कैसे कर सकता हूं?

उत्तर

11
Regex RgxUrl = new Regex("[^a-z0-9]"); 
        blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck); 
+9

क्या आपने ए-जेड को याद किया .. – Manish

+1

यह 'à' स्वीकार करेगा, क्या यह ओपी के लिए एक विशेष चरित्र है? (बेशक यह नहीं है, ओपी पहले से ही जवाब स्वीकार कर लिया है) –

35

उपयोग String.IndexOfAny:

private static readonly char[] SpecialChars = "[email protected]#$%^&*()".ToCharArray(); 

... 

int indexOf = text.IndexOfAny(SpecialChars); 
if (indexOf == -1) 
{ 
    // No special chars 
} 
पाठ्यक्रम पाश आंतरिक मिलेगी कि के

- लेकिन कम से कम आप अपने कोड में यह करने के लिए नहीं है।

+0

अरे जॉन, आप मार्क के खरीदारों को कैसे लागू करेंगे? – Manish

+0

@ मिशेल: यह देखते हुए कि आपके पास श्वेतसूची के लिए पात्रों की एक विस्तृत श्रृंखला होने की संभावना है, एक रेगेक्स शायद जाने का तरीका है। –

10
इसके बजाय पता चल सके कि एक स्ट्रिंग "विशेष वर्ण" यह अक्सर जाँच करने के लिए है कि स्ट्रिंग के सभी पात्रों पर "साधारण" दूसरे शब्दों में वर्ण, एक काली सूची के बजाय एक श्वेत सूची का उपयोग कर रहे हैं बेहतर है शामिल की

। इसका कारण यह है कि बहुत सारे पात्र हैं जिन्हें "विशेष पात्र" माना जा सकता है और यदि आप उन्हें सूचीबद्ध करने का प्रयास करते हैं तो आप सभी को याद करने के लिए बाध्य हैं।

तो जो कुछ आपने पूछा है उसे करने के बजाय यह जांचना बेहतर होगा कि आपकी स्ट्रिंग regex @"^\w+$", या जो भी आपको चाहिए, से मेल खाती है।

+1

अच्छा विचार ... !! – Manish

+3

@ बबलवाप: मैंने श्वेतसूची के साथ एक रेगेक्स का उपयोग करने का सुझाव दिया। क्या यह सवाल का वैध जवाब नहीं है? ब्लैक लिस्ट विधि के साथ समस्या वह बिट है जहां वह 'आदि ...' लिखता है। कंप्यूटर अनुमान लगा सकते हैं कि आपका क्या मतलब है, और सभी विशेष पात्रों की एक सूची लिखना आईएमएचओ इस समस्या से निपटने का गलत तरीका है। –

+0

आईएमओ यह नहीं है। प्रश्न के पीछे प्रेरणा को जानने के बिना, आप वास्तव में यह नहीं कह सकते कि श्वेतसूची का उपयोग इंडेक्सऑफनी का उपयोग करने के लिए एक बेहतर (या यहां तक ​​कि वैध) विकल्प है। और सवाल यह था कि, जैसा कि मैंने इसे पढ़ा, विशेष रूप से ब्लैकलिस्ट के बारे में। – Bubblewrap

-1

पीएचपी का उपयोग करना, तुम कोशिश कर सकते हैं:

if (preg_match("[^A-Za-z0-9]", $yourString) { 
    //DO WHATEVER 
} 

यह सच वापस आ जाएगी स्ट्रिंग एक अक्षर या संख्या के अलावा और कुछ है या नहीं।

उम्मीद है कि इससे मदद मिलती है।

+4

प्रश्न सी # को टैग किया गया है। –

+2

सी # में नहीं, लेकिन फिर भी मुझे आवश्यक रेगेक्स दिया। :) – Manish

+0

@ मिशेल: ठीक है, यह * ए * रेगेक्स है - लेकिन कोई भी जो वास्तव में प्रश्न से मेल खाता है। यदि आप कहेंगे "मैं केवल अल्फान्यूमेरिक वर्णों को शामिल करना चाहता हूं, और कोई उच्चारण नहीं आदि" तो यह एक अलग मामला होता। –

-1

भी ...

foreach (char character in "some*[email protected]#@!#string") 
     { 
      if(!Char.IsLetterOrDigit(character)) 
      { 
       //It is a special character. 
      } 
     } 
+2

-1, विशेष रूप से लूप का उपयोग किए बिना सवाल में कहा ... – Manish

0
public static bool HasSpecialCharacters(string str) 
{ 
    string specialCharacters = @"%[email protected]#$%^&*()?/>.<,:;'\|}]{[_~`+=-" +"\""; 
    char[] specialCharactersArray = specialCharacters.ToCharArray(); 

    int index = str.IndexOfAny(specialCharactersArray); 
    //index == -1 no special characters 
    if (index == -1) 
    return false; 
    else 
    return true; 
} 
1

मैं एक अलग परिणाम हासिल करने के लिए कोशिश कर रहा था। एक विधि बनाने के लिए जो एक निर्धारित स्ट्रिंग को अलग करने के लिए उपयोग किए जाने वाले विशेष वर्ण को लौटाता है, फिर उसी स्ट्रिंग को विभाजित करने के लिए इसका उपयोग करने के लिए 1 # 4 # 5 कहें। चूंकि मैं जिस सिस्टेम को बनाए रख रहा हूं, वह कई अलग-अलग लोगों द्वारा बनाया गया है, और कुछ मामलों में, मुझे नहीं पता कि पैटर्न कौन सा है (आमतौर पर कोई नहीं है), निम्नलिखित ने मुझे बहुत मदद की। और मैं अभी तक मतदान नहीं कर सकता।

public String Separator(){ 
     **String specialCharacters = "%[email protected]#$#^&*()?/>.<:;\\|}]{[_~`+=-" +"\"";** 
     char[] specialCharactersArray = specialCharacters.toCharArray(); 
     char[] a = entrada.toCharArray(); 
     for(int i = 0; i<a.length; i++){ 
      for(int y=0; y < specialCharactersArray.length; i++){ 
       if(a[i] == specialCharactersArray[y]){ 
        separator = String.valueOf(specialCharactersArray[y]); 
       } 
      } 
     } 
     return separator; 
    } 

धन्यवाद दोस्तों।

1
//apart from regex we can also use this 
string input = Console.ReadLine(); 
      char[] a = input.ToCharArray(); 
      char[] b = new char[a.Length]; 
      int count = 0; 
      for (int i = 0; i < a.Length; i++) 
      { 
       if (!Char.IsLetterOrDigit(a[i])) 
       { 
        b[count] = a[i]; 
        count++; 
       } 
      } 
      Array.Resize(ref b, count); 
      foreach(var items in b) 
      { 
       Console.WriteLine(items); 
      } 
      Console.ReadLine(); 
//it will display the special characters in the string input 
3

यहाँ LINQ

private bool ContainsSpecialChars(string value) 
{ 
     var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""}; 
     return list.Any(value.Contains); 
} 
4

LINQ का उपयोग विशेष वर्ण के लिए जाँच करने के लिए एक छोटी समाधान है नई काला है।

string.Any(c => char.IsSymbol(c)); 

IsSymbol() के लिए, वैध प्रतीकों UnicodeCategory के सदस्य हैं।इस तरह के सबस्क्रिप्ट और सुपरस्क्रिप्ट के रूप में

  • प्रतीक, जो इस तरह के ℅, № के रूप में गणितीय अक्षरांकीय प्रतीकों के साथ ही प्रतीकों के समूहों को शामिल पत्र-, और ™
  • संख्या रूपों,
  • गणितीय ऑपरेटरों और तीर
  • ज्यामितीय प्रतीकों
  • तकनीकी प्रतीकों
  • ब्रेल पैटर्न
  • Dingbats

संपादित करें:

यह सभी पात्रों को पकड़ने नहीं है। यह पूरक हो सकता है:

string.Any(c => !char.IsLetterOrDigit(c)); 
संबंधित मुद्दे