我必须使用NSPredicate在NSString中找到数字。我正在使用以下代码。
NSString *test = @"[0-9]";
NSString *testString = @"ab9";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ CONTAINS[c] %@)", test,testString];
BOOL bResult = [predicate evaluateWithObject:testString];
此代码仅在开始时搜索号码。我也试过@“[0-9] +”和@“[0-9] *”这些表达式,但没有得到正确的结果。
答案 0 :(得分:2)
使用此
NSCharacterSet *set= [NSCharacterSet alphanumericCharacterSet];
if ([string rangeOfCharacterFromSet:[set invertedSet]].location == NSNotFound) {
// contains A-Z,a-z, 0-9
} else {
// invalid
}
看看它是否有效
答案 1 :(得分:1)
当你说
时[predicate testString]
您实际上是在发送'testString'消息(即:调用'testString'方法)到谓词对象中。没有这样的事情。
我相信你应该发送的是'evaluateWithObject'消息,即:
BOOL bResult = [predicate evaluateWithObject:testString];
evaluateWithObject方法引用说:
返回一个布尔值,指示给定对象是否匹配 接收者指定的条件。
答案 2 :(得分:0)
使用NSCharacterSet分析NSString。
NSCharacterSet *set= [NSCharacterSet alphanumericCharacterSet];
NSString testString = @"This@9";
BOOL bResult = [testString rangeOfCharacterFromSet:[set invertedSet]].location != NSNotFound;
if(bResult)
NSLog(@"symbol found");
set = [NSCharacterSet uppercaseLetterCharacterSet];
bResult = [password rangeOfCharacterFromSet:set].location != NSNotFound;
if(bResult)
NSLog(@"upper case latter found");
set = [NSCharacterSet lowercaseLetterCharacterSet];
bResult = [password rangeOfCharacterFromSet:set].location != NSNotFound;
if(bResult)
NSLog(@"lower case latter found");
set = [NSCharacterSet decimalDigitCharacterSet];
bResult = [password rangeOfCharacterFromSet:set].location != NSNotFound;
if(bResult)
NSLog(@"digit found");