Tôi không chắc hai câu trả lời trước đây bao gồm các yêu cầu, vì vậy đây là câu trả lời tương ứng với cách giải thích chặt chẽ hơn các yêu cầu.
Lấy các yêu cầu từ các chú thích trong mã của các bài bản gốc:
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present?
Điều này có nghĩa rằng một chuỗi để vượt qua các thử nghiệm phải bao gồm chỉ số và chữ cái và ít nhất một trong mỗi.
NSString
's rangeOfCharacterFromSet:
tìm một ký tự trong một chuỗi nếu thuộc về một tập hợp nhất định, vì vậy chúng tôi có thể sử dụng một ký tự đó.
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
}
Như đã trình bày trong các tài liệu, các rangeOfCharacterFromSet:
trả về một NSRange của {NSNotFound, 0} trong trường hợp không có nhân vật từ bộ được tìm thấy trong chuỗi. Điều này tương tự như các phương pháp khác để tìm kiếm chuỗi hoặc ký tự trong một chuỗi trong Cocoa.
Tôi biết rằng đó là dị giáo để nói điều này nhưng cách đơn giản nhất, dễ hiểu nhất và hiệu quả nhất để làm điều này gần như chắc chắn là chỉ lặp qua chuỗi, trích xuất từng ký tự bằng 'characterAtIndex' và kiểm tra nó dựa vào các giới hạn thích hợp . Với những người khác, bạn nên có một số nhận xét khá darn tốt nếu bạn muốn hiểu mã 6 tháng kể từ bây giờ. –