Eli*_*hme 12 sqlite arabic uisearchbar ios7
众所周知,NSDiacriticInsensitiveSearch对阿拉伯字母的影响与对法语的影响不同.这就是为什么我试图用阿拉伯字母创造相同的效果.
例如,如果用户输入字母"ا",则搜索栏应同时显示包含字母"ا"和字母"أ"的所有单词.
使用以下行:
text = [text stringByReplacingOccurrencesOfString:@"?" withString:@"?"];
Run Code Online (Sandbox Code Playgroud)
不会显示以"ا"开头的单词的结果.
在搜索栏中,我尝试实现与我在法国案例中所做的相同的NSDiacriticInsensitiveSearch方法,但它没有成功:
NSRange nameRange = [author.name rangeOfString:text options:NSAnchoredSearch | NSDiacriticInsensitiveSearch];
Run Code Online (Sandbox Code Playgroud)
有任何想法如何完成这项工作?
小智 0
您可以使用正则表达式来处理阿拉伯语(Alif)的不同形状。
\n\n假设您有一个上下文,即"\xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xa8\xd9\x86 \xd8\xa5\xd8\xa8\xd8\xb1\xd8\xa7 \xd9\x87\xd9\x8a\xd9\x85 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x87\xd9\x8a\xd9\x85\xd9 \x8a",要搜索的模式是"\xd8\xa5\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x87\xd9\x8a\xd9\x85",那么你可以将该模式转换为处理“\xd8\xa3”之间差异的正则表达式。正则表达式应为“(\xd8\xa3|\xd8\xa5|\xd8\xa7)\xd8\xa8\xd8\xb1(\xd8\xa3|\xd8\xa5|\xd8\xa7)\xd9\x87 \xd9\x8a\xd9\x85"。这将通过所有可能的形状来搜索模式。
\n\n这是我写的一个简单的代码:
\n\n#import <Foundation/Foundation.h>\n\nNSString * arabify(NSString * string)\n{\n NSRegularExpression * alifRegex = [NSRegularExpression regularExpressionWithPattern:@"(\xd8\xa3|\xd8\xa7|\xd8\xa5)" options:0 error:nil];\n return [alifRegex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"(\xd8\xa3|\xd8\xa7|\xd8\xa5)"];\n}\n\nint main(int argc, const char * argv[])\n{\n\n @autoreleasepool {\n\n NSString * context = @"\xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xa8\xd9\x86 \xd8\xa5\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x87\xd9\x8a\xd9\x85 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x87\xd9\x8a\xd9\x85\xd9\x8a";\n NSString * pattern = @"\xd8\xa5\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x87\xd9\x8a\xd9\x85";\n\n // Get the regex for the Arabic word.\n NSString * regex = arabify(pattern);\n\n NSLog(@"context = %@", context);\n NSLog(@"pattern = %@", pattern);\n NSLog(@"regex = %@", regex);\n\n NSRange range = [context rangeOfString:regex options:NSRegularExpressionSearch];\n\n if (range.location == NSNotFound)\n {\n NSLog(@"Not found.");\n }\n else\n {\n NSLog(@"Found.");\n NSLog(@"location = %lu, length = %lu", (unsigned long)range.location, (unsigned long)range.length);\n }\n }\n\n return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n祝兄弟好运。
\n 归档时间: |
|
查看次数: |
510 次 |
最近记录: |