ios7 sqlite3 uisearchbar arabic

ios7 - NSDiacriticInsensitiveSearch y búsqueda árabe



sqlite3 uisearchbar (2)

Puede usar la expresión regular para manejar las diferentes formas árabes (Alif) .

Supongamos que tiene un contexto, que es "محمد بن إبراهيم الابراهيمي" , y el patrón para buscar es "إبراهيم" , luego puede convertir el patrón en una expresión regular que maneja la diferenciación entre "Ã". La expresión regular debería ser "(أ | إ | ا) بر (أ | إ | ا) هيم" . Esto buscará el patrón por todas sus formas posibles.

Aquí hay un código simple que escribí:

#import <Foundation/Foundation.h> NSString * arabify(NSString * string) { NSRegularExpression * alifRegex = [NSRegularExpression regularExpressionWithPattern:@"(أ|ا|إ)" options:0 error:nil]; return [alifRegex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"(أ|ا|إ)"]; } int main(int argc, const char * argv[]) { @autoreleasepool { NSString * context = @"محمد بن إبراهيم الابراهيمي"; NSString * pattern = @"إبراهيم"; // Get the regex for the Arabic word. NSString * regex = arabify(pattern); NSLog(@"context = %@", context); NSLog(@"pattern = %@", pattern); NSLog(@"regex = %@", regex); NSRange range = [context rangeOfString:regex options:NSRegularExpressionSearch]; if (range.location == NSNotFound) { NSLog(@"Not found."); } else { NSLog(@"Found."); NSLog(@"location = %lu, length = %lu", (unsigned long)range.location, (unsigned long)range.length); } } return 0; }

Buena suerte hermano.

Como es sabido, el NSDiacriticInsensitiveSearch no tiene el mismo efecto en letras árabes como lo hace en francés. Es por eso que estoy tratando de crear el mismo efecto pero con letras árabes.
Por ejemplo, si un usuario ingresa la letra "ا", la barra de búsqueda debe mostrar todas las palabras que contienen la letra "ا" y la letra: "Ã" al mismo tiempo.
El uso de la siguiente línea:

text = [text stringByReplacingOccurrencesOfString:@"ا" withString:@"أ"];

no mostrará los resultados de las palabras que comienzan con "ا".
En la barra de búsqueda, traté de implementar el mismo método NSDiacriticInsensitiveSearch como lo hice en el caso francés, y no funcionó:

NSRange nameRange = [author.name rangeOfString:text options:NSAnchoredSearch | NSDiacriticInsensitiveSearch];

¿Alguna idea de cómo hacer esto?


Parece que estás usando el símbolo compuesto (U + 0623), que no se combina con otras representaciones de Alif.

¿Consideró otros métodos de codificación para el Alif? Podrías usar la variante descompuesta, que luego se cotejaría con el Alif "simple" (U + 0627) de la forma en que pretendes:

ARABIC LETTER ALEF (U+0627) ARABIC HAMZA ABOVE (U+0654)

Vea aquí: http://www.fileformat.info/info/unicode/char/0623/index.htm