2015-12-14 9 views
8

हैं, मुझे यह जांचना है कि स्ट्रिंग में केवल अक्षरों, अंक और अंडरस्कोर हैं या नहीं।जांचें कि क्या स्ट्रिंग में केवल अक्षरों, अंक और अंडरस्कोर

for(int i = 0; i<=snameA.Length-1; i++) 
{ 
    validA = validA && (char.IsLetterOrDigit(snameA[i])||snameA[i].Equals("_")); 
} 
+2

इस पैटर्न पर जांच के लिए रेगेक्स का उपयोग करने का प्रयास करें: ([ए-ज़ा-जे 0-9 \ - \ _] +) –

+0

मुझे नहीं पता। validA एक बुलियन है जिसे केवल तभी सही किया जाना चाहिए जब शर्तों को पूरा किया जाता है लेकिन यह सही पर सेट होता है भले ही स्ट्रिंग के विशेष वर्ण –

+0

"काम नहीं करता" क्या होता है? त्रुटियों? अमान्य परिणाम? – Sayse

उत्तर

6

मैं प्रश्न के इस प्रकार के लिए Linq प्यार:

bool validA = sname.All(c => Char.IsLetterOrDigit(c) || c.Equals('_')); 
9

आप validA हर बार फिर से बताए जाते हैं, पिछला मान की जाँच के बिना: यह मैं कैसे की कोशिश की लेकिन यह काम नहीं करता है। अब आप हमेशा अंतिम चेक निष्पादित मूल्य का मूल्य प्राप्त करते हैं।

आप 'और' परिणाम हो सकते हैं:

validA &= (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_'); 

यह आप अभी भी सभी वर्णों, यदि पहली जांच में विफल जो बेकार हो सकता है चलाने का मतलब होगा। तो यह बेहतर है बस बाहर कदम अगर यह विफल:

for(int i = 0; i<=snameA.Length-1; i++) 
{ 
    validA = (char.IsLetterOrDigit(snameA[i]) || snameA[i] == '_'); 

    if (!validA) 
    { break; } // <-- see here 
} 

या LINQ के साथ:

validA = snameA.All(c => char.IsLetterOrDigit(c) || c == '_'); 
+1

मैंने अपना डाउनवोट वापस ले लिया है। Regexp का उपयोग करना मुझे लगता है कि पसंद का मामला है और आपका जवाब भी पूरी तरह से सही है। – Dinos

+0

धन्यवाद। मैं नहीं कहता कि ओपी को रेगेक्स का उपयोग नहीं करना चाहिए, लेकिन अब वह जानता है कि उसके कोड में क्या गलत था। :) आपकी ईमानदारी के लिए धन्यवाद। –

4

आप उपयोग कर सकते regex

Regex regex1 = new Regex(@"^[a-zA-Z0-9_]+$"); 

if(regex1.IsMatch(snameA)) 
{ 

} 
+0

@ पैट्रिकहोफमैन मैं एक बयान भूल जाता हूं .. धन्यवाद – Sachu

+0

'रेगेक्स' पैरामीटर के रूप में अपना स्वयं का उदाहरण ले रहा है! – Bharadwaj

+0

बीटीडब्ल्यू, 'ए-जेए-जेड 0-9_'' \ w' –

2

मैं एक Regex

string pattern = @"^[a-zA-Z0-9\_]+$"; 
Regex regex = new Regex(pattern); 

// Compare a string against the regular expression 
return regex.IsMatch(stringToTest); 
का प्रयोग करेंगे
3

आप नियमित अभिव्यक्ति से मेल खाने का प्रयास कर सकते हैं एन। "अक्षर, अंक और अंडरस्कोर" के लिए एक अंतर्निहित प्रकार है, जो "\ w" है।

Regex rgx = new Regex(@"\w*"); 
rgs.IsMatch(yourString); 

यदि आपको 1 या अधिक की आवश्यकता है, तो "\ w +" का उपयोग करें।

इसके अलावा यहां जानकारी: Regex.IsMatch

+2

* में \ w *' से मेल खाता है * यदि किसी स्ट्रिंग में ** केवल ** अक्षर, अंक और अंडरस्कोर * => आपकी जांच है यदि स्ट्रिंग में * कोई * अक्षर, अंक और अंडरस्कोर शामिल हैं –

0

पहले, पत्र थोड़ा अस्पष्ट शब्द है: आप a..z और A..Z पात्रों मतलब है या पत्र सका से संबंधित कोई वर्णमाला, उदाहरण के लिए а..я और А..Я (रूसी, सिरिलिक अक्षरों)। आपके वर्तमान कार्यान्वयन के अनुसार, आप दूसरा विकल्प चाहते हैं।

पाश के साथ विशिष्ट समाधान पहले काउंटर उदाहरण जब तक जांच करने के लिए है:

Boolean validA = true; // true - no counter examples so far 

    // Why for? foreach is much readble here 
    foreach(Char ch in sname) 
    // "!= '_'" is more readable than "Equals"; and wants no boxing 
    if (!char.IsLetterOrDigit(ch) && ! (ch != '_')) { 
     Boolean validA = false; // counter example (i.e. non-letter/digit symbol found) 

     break; // <- do not forget this: there's no use to check other characters 
    } 

हालांकि आप के साथ कोड को आसान बनाने में कर सकते हैं या तो Linq:

validA = sname.All(ch => Char.IsLetterOrDigit(ch) || ch == '_'); 

या नियमित अभिव्यक्ति:

validA = Regex.IsMatch(sname, @"^\w*$"); 
संबंधित मुद्दे