2012-02-12 16 views
1

這個搜索是一個後續問題this one ..的iOS:如何從搜索字符串刪除無效字符,同時允許多個單詞

感謝尼克·洛克伍德,我可以用這個代碼過濾不良字符:

NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]] componentsJoinedByString:@""]; 

但是,我有像「我,你」或「這不是一個」的字符串。

我希望能夠搜索「你」或「那個」。

上面的代碼似乎限制了我太多,我只能搜索詞到特殊字符..

我可以有更多的幫助嗎?

UPDATE:

我已經使用這個代碼的嘗試:

NSString *badChars = @"\\\'"; 
NSCharacterSet *badCharSet = [NSCharacterSet characterSetWithCharactersInString: badChars]; 
NSString *safeSearchString = [sbar.text stringByTrimmingCharactersInSet:badCharSet]; 

,但沒有喜悅。請原諒所有的新手問題...

第二次更新:

我也試過這個代碼。這是一個委託方法:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if ((text == @"\\") || (text == @"\'")) { 
     return NO;  
    } else { 
     return YES; 
    } 
} 

它幾乎工作,但是沒有生存謂詞檢查:「無法解析格式字符串」主要包含[CD]‘不是’或解釋包含[CD]「ISN 't'OR摘要包含[cd]'不是'OR數據包含[cd]'不是'''...

+0

你打算如何使用safeSearchString?查詢sqlite數據庫? – 2012-02-12 22:30:00

+0

'stringByTrimmingCharactersInSet:'只會從字符串的末尾移除不需要的字符,如果它們存在於中間則不會移除字符。 – jonkroll 2012-02-12 22:50:09

+0

我已經發布了一些使用這種方法的代碼,但我必須弄錯它,它仍然崩潰...... JonKroll說。請任何其他想法? – 2012-02-12 23:02:41

回答

6

我不確定你明白你的例子中的代碼在做什麼。這是什麼代碼所做的是:

  1. 創建一組的所有字母數字字符
  2. 創建T的逆帽子套裝(即所有非字母數字字符)
  3. 打破你原始字符串成子陣列,由任何字符的非字母數字字符分開設置
  4. 重新組裝該數組中的子回成一個字符串作爲最終結果

最終結果是您的原始字符串減去任何非字母數字字符。所以,如果你原來的搜索字符串是這樣的:

This isn't the one 

然後你safeSearchString將是:

Thisisnttheone 

我覺得這可能不是你想要的。我不清楚你正在做什麼的背景,但我可以提供一些可能有所幫助的想法:

如果您只想從字符串中刪除一些非字符而非所有非字母數字,您可以創建自定義字符集是這樣的:

// remove only apostrophe and dollar sign characters 
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"'$"]; 
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""]; 

如果你想刪除所有非字母數字字符,但保留了空間:

// remove any characters except alphanumeric and space 
NSMutableCharacterSet *charSet = [NSMutableCharacterSet [email protected]" "]; 
[charset formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; 
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""]; 

您可能還需要刪除非字母數字/非空格字符然後分離成單個詞的數組:

NSString * searchString = @"This isn't the one"; // example 

// remove any characters except alphanumeric and space and break into an array on word boundaries 
NSMutableCharacterSet *charSet = [NSMutableCharacterSet [email protected]" "]; 
[charset formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; 
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""]; 
NSArray *safeSearchWords = [safeSearchString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

NSString *word; 
for (word in safeSearchWords) { 
    NSLog(@"%@",word); 
} 

// This 
// isnt 
// the 
// one 
+0

哇,謝謝你..我會探索你發送的東西,並回復你... – 2012-02-12 23:23:46

+0

我可以住這個://刪除撇號和美元符號字符 NSCharacterSet * charSet = [NSCharacterSet characterSetWithCharactersInString :@ 「」$「]; NSString * safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@「」];因爲它不會崩潰,但我希望我可以搜索多個單詞。 – 2012-02-12 23:36:59

+0

我建議您在搜索多個單詞時打開一個新問題。在這個問題中,您需要解釋您目前如何實現搜索併發布您的搜索代碼,以便其他用戶能夠爲您提供幫助。 – jonkroll 2012-02-13 01:51:25