NSPredicate在NSString中搜索数字

时间:2013-01-10 06:16:59

标签: iphone nspredicate

我必须使用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] *”这些表达式,但没有得到正确的结果。

3 个答案:

答案 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");