1

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

4

3 回答 3

2

用这个

NSCharacterSet  *set= [NSCharacterSet alphanumericCharacterSet];
if ([string rangeOfCharacterFromSet:[set invertedSet]].location == NSNotFound) {
    // contains A-Z,a-z, 0-9 
} else {
    // invalid
}

看看它是否有效

于 2013-01-10T06:50:35.777 回答
1

当你说

[predicate testString]

您实际上是在向谓词对象发送“testString”消息(即:调用“testString”方法)。哪有这回事。

我相信您应该发送的是“evaluateWithObject”消息,即:

BOOL bResult = [predicate evaluateWithObject:testString];

evaluateWithObject 方法参考说:

返回一个布尔值,指示给定对象是否与接收者指定的条件匹配。

于 2013-01-10T06:22:16.707 回答
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");
于 2013-01-10T07:50:45.487 回答