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 に答える