2010-08-21 11 views
7

मैं यह जांचने का सबसे अच्छा तरीका ढूंढ रहा हूं कि एनएसएसटींग में संख्यात्मक और वर्णमाला दोनों वर्ण हैं। जो मैंने अभी तक किया है वह नीचे दिया गया कोड है, लेकिन यह सिर्फ मुझे बताता है कि कोई भी वर्ण दर्ज नहीं किया गया था जो संख्या या अक्षर नहीं हैं।एनएसएसटींग की जांच करें पत्र और संख्या दोनों

if([[myNSString stringByTrimmingCharactersInSet: 
      [NSCharacterSet alphanumericCharacterSet]] isEqualToString:@""]){  
    //The string only contains alpha or numerical characters. 
    //But now I want to check that both character sets are present ?  
} 
+0

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

उत्तर

14

बस letterCharacterSet और decimalDigitCharacterSet ट्रिम और देखें कि क्या उत्पादन स्ट्रिंग मूल स्ट्रिंग के बराबर नहीं है:

if (![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]] isEqualToString:myOriginalString] 
    && ![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet letterCharacterSet]] isEqualToString:myOriginalString]) { 
... 
} 
+0

धन्यवाद। हां यही मैं अंत में कर रहा था। – ADude

+0

क्या एक अच्छी चीज है! – jianpx

+0

एक बग का पता लगाएं: यदि स्ट्रिंग में नियंत्रण चरित्र होता है, तो यह हाँ देता है, यह गलत है। – jianpx

5

kovpas 'जवाब ठीक काम करता है अगर तुम पर शुरुआत में अक्षर या अंत और अंक विपरीत अंत एक समस्या तब होती है जब अक्षरों या उप-विपरीत, जैसे 'abc123abc' के बीच अंक एम्बेड किए जाते हैं। यहां एक समाधान है:

if (![[[str componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""] isEqualToString:str] 
    && ![[[str componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""] isEqualToString:str]) { 
    .... 
} 
+0

यह उत्तर बहुत बेहतर काम करता है! मुझे यकीन नहीं है कि आप 'invertedSet' का उपयोग क्यों कर रहे हैं। धन्यवाद – Ezeki

+0

इस समस्या की चाल यह है कि एक पुष्टिकरण की जांच करने के लिए यह अधिक जटिल है। पहली जांच अंकों के बिना एक स्ट्रिंग बनाता है; यदि स्ट्रिंग मूल के समान है, तो स्ट्रिंग में कोई अंक नहीं हैं। अक्षरों के लिए दूसरे चेक के साथ एक समान जांच की जाती है। यही कारण है कि 2 स्थितियों के लिए नहीं है। – Amory

+0

हां, लेकिन आपको 'इनवर्टेडसेट' का उपयोग करने की आवश्यकता नहीं है, यह बिना किसी काम के पूरी तरह से काम करता है – Ezeki

4

मुझे यकीन नहीं है कि पिछले दो उत्तरों में आवश्यकताओं को शामिल किया गया है, इसलिए यह एक उत्तर है जो आवश्यकताओं की एक कठोर व्याख्या के अनुरूप है।

मूल पोस्ट के कोड में टिप्पणियां से आवश्यकताओं ले रहा है:

//The string only contains alpha or numerical characters. 
//But now I want to check that both character sets are present? 

इसका मतलब है कि परीक्षण पारित करने के लिए एक स्ट्रिंग केवल संख्या और अक्षरों और प्रत्येक के कम से कम एक से मिलकर चाहिए।

NSStringrangeOfCharacterFromSet: एक स्ट्रिंग में एक वर्ण पाता है यदि यह किसी निश्चित सेट से संबंधित है, तो हम इसका उपयोग कर सकते हैं।

NSString *string = // ... string to test; 

NSCharacterSet *illegalChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; 

// Test if there is an illegal character in the string 
BOOL hasIllegalCharacter = [string rangeOfCharacterFromSet: illegalCharacterSet].location != NSNotFound; 

BOOL hasLetter = [string rangeOfCharacterFromSet: [NSCharacterSet letterCharacterSet]].location != NSNotFound; 

BOOL hasDigit = [string rangeOfCharacterFromSet: [NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound; 

if (hasDigit && hasLetter && !hasIllegalCharacter ) { 
    // String OK 
} 

डॉक्स में विस्तृत रूप में, rangeOfCharacterFromSet: {NSNotFound, 0} मामले में सेट से कोई चरित्र स्ट्रिंग में पाया जाता है के एक NSRange देता है। यह कोको में स्ट्रिंग में तारों या पात्रों की खोज के लिए अन्य विधियों के समान है।

+0

समझने में आसान – jianpx

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