2013-01-10 47 views
1

我必須使用NSPredicate在NSString中查找數字。我正在使用以下代碼。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

你只需要檢查編號是否存在? – amar

回答

2

使用此

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

看看它是否工作

+0

嘗試製作字符集,如果它劑量工作 – amar

+0

謝謝阿馬爾的答覆我想要搜索大寫字母,小寫字母,在NSString中的數字。所以我要去正規表達。此代碼將僅搜索數字。 – Nik

+0

我編輯了答案,猜猜它現在對你有用 – amar

1

當你說

[predicate testString] 

你實際發送 '的TestString' 消息(即:調用 '的TestString' 法)爲謂詞對象。哪有這回事。

我相信你應該發送的反而是「evaluateWithObject」消息,即:

BOOL bResult = [predicate evaluateWithObject:testString]; 

的evaluateWithObject方法參照說:

返回一個布爾值,指示給定對象匹配 接收機指定的條件。

+0

嗨gerrytan謝謝你的回覆它是輸入錯誤,而發佈的問題,我使用BOOL bResult = [predicate evaluateWithObject:testString];在我的代碼中,但我仍然沒有得到結果。 – Nik

0

使用NSCharacterSet分析的NSString。

NSCharacterSet *set= [NSCharacterSet alphanumericCharacterSet]; 
NSString testString = @"[email protected]"; 

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