Dav*_*nte 1 search full-text-search ios
这是对这个问题的后续问题.
感谢Nick Lockwood,我可以使用此代码来过滤不良字符:
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)
但是,我有像"我,你"或"这不是那个"的字符串.
我希望能够搜索"你"或"那个".
上面的代码似乎限制了我太多,我只能搜索特殊字符的单词.
我可以帮忙吗?
更新:
我试过使用这段代码:
NSString *badChars = @"\\\'";
NSCharacterSet *badCharSet = [NSCharacterSet characterSetWithCharactersInString: badChars];
NSString *safeSearchString = [sbar.text stringByTrimmingCharactersInSet:badCharSet];
Run Code Online (Sandbox Code Playgroud)
但没有快乐..请原谅所有新手问题......
第二次更新:
我也试过这个代码.这是一个委托方法:
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ((text == @"\\") || (text == @"\'")) {
return NO;
} else {
return YES;
}
}
Run Code Online (Sandbox Code Playgroud)
它几乎可以工作,但不能在谓词检查中存活:"无法解析格式字符串"main包含[cd]'不是'或解释包含[cd]'不是'或者摘要包含[cd]'isn' t'或数据包含[cd]'不是'''...
我不确定你明白你的例子中的代码是做什么的.该代码的作用是:
最终结果是您的原始字符串减去任何非字母数字字符.所以如果你的原始searchString是这样的:
This isn't the one
Run Code Online (Sandbox Code Playgroud)
然后你的safeSearchString将是:
Thisisnttheone
Run Code Online (Sandbox Code Playgroud)
我想这可能不是你想要的.我不确切知道你在做什么的背景,但我可以给出一些可能有帮助的想法:
如果您只想从字符串中删除某些非法字符而不是所有非字母数字,您可以创建一个自定义字符集,如下所示:
// remove only apostrophe and dollar sign characters
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"'$"];
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)
如果要删除所有非字母数字字符但保留空格:
// remove any characters except alphanumeric and space
NSMutableCharacterSet *charSet = [NSMutableCharacterSet characterSetWithCharactersInString@" "];
[charset formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
NSString *safeSearchString = [[searchString componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)
您可能还想删除非字母数字/非空格字符,然后分成单个单词的数组:
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 characterSetWithCharactersInString@" "];
[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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4901 次 |
| 最近记录: |