我需要检查字符串是否包含一个大写字母,一个小写字母,一个整数和一个特殊字符。我该如何检查?
答案 0 :(得分:14)
没有任何其他框架:
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"] invertedSet];
if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
NSLog(@"This string contains illegal characters.");
}
您也可以使用正则表达式(此语法来自RegexKitLite:http://regexkit.sourceforge.net):
if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
NSLog(@"This string contains illegal characters.");
}
答案 1 :(得分:9)
发现稍微好一点的实现。对Ameesh答案的改进
- (BOOL)isValidString:(NSString *)string
{
return [string rangeOfCharacterFromSet:[NSCharacterSet uppercaseLetterCharacterSet]].location != NSNotFound &&
[string rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]].location != NSNotFound &&
[string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound;
}
答案 2 :(得分:4)
Maulik的回答是不正确的。这将检查除任何字母数字字符以外的任何内容,但不强制执行一个大写字母,一个小写字母和一个整数。事实上,您必须进行3次检查以验证每个约束。
NSCharacterSet *lowerCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];
NSCharacterSet *upperCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLKMNOPQRSTUVWXYZ"];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
if ([aString rangeOfCharacterFromSet:lowerCaseChars].location == NSNotFound || [aString rangeOfCharacterFromSet:upperCaseChars].location = NSNotFound || [aString rangeOfCharacterFromSet:numbers].location == NSNotFound) {
NSLog(@"This string contains illegal characters");
}
答案 3 :(得分:1)
支持阿拉伯语/英语
NSString *regEx = @"^([a-zA-Z0-9\u0600-\u06ff](\\-|\\_|\\.|\\ )?)+$";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regEx];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject: self.text];
if (!myStringMatchesRegEx)
return NO;
答案 4 :(得分:-1)
这是我要做的。为需要检查相应值是否存在的每个条件创建正则表达式。
即。正则表达式检查它是否有一个大写字母,一个小写字母,一个整数和一个特殊字符,依此类推。
然后使用相同的字符串来检查每个正则表达式,如果所有正则表达式都返回true,那么如果没有则获胜者则字符串与您的条件不匹配。
//验证UpperCaseLetter的示例对匹配正则表达式的所有其他示例执行相同的操作。
-(BOOL) validateOneUpperCaseLetter:(NSString *)string {
if ((string == nil) || ([string isEqualToString: @""])) {
return NO;
}
// Change this regEx to one you needed. // this one validates for the "name".
NSString *regEx = @"^[a-zA-Z]+(([\\'\\,\\.\\ -][a-zA-Z])?[a-zA-Z]\\s*)*$";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regEx];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject: string];
if (!myStringMatchesRegEx) {
return NO;
}
return YES;}