我不知道前兩個答案覆蓋的要求,所以這是對應於要求的更嚴格的解釋回答。
以從原崗位的代碼中的註釋要求:
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present?
這意味着,一個字符串,通過測試只能包含數字和字母,每一個的至少一個。
NSString
的rangeOfCharacterFromSet:
在字符串中找到一個字符,如果它屬於某個集合,那麼我們可以使用該字符。
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。這與在Cocoa中搜索字符串或字符的其他方法類似。
我知道說這是異端,但最簡單,最容易理解,最有效的方法就是循環訪問字符串,用'characterAtIndex'提取每個字符,並根據適當的邊界對其進行測試。與其他人一樣,如果你想從現在開始的6個月內瞭解代碼,最好有一些非常好的評論。 – 2013-05-13 15:16:00