2012-02-12 18 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