2014-04-11 7 views
11

ज्ञात है, NSDiacriticInsensitiveSर्च फ्रांसीसी पर अरबी अक्षरों पर समान प्रभाव नहीं करता है। यही कारण है कि मैं एक ही प्रभाव बनाने की कोशिश कर रहा हूं लेकिन अरबी अक्षरों के साथ।
उदाहरण के लिए, यदि कोई उपयोगकर्ता "ا" अक्षर में प्रवेश करता है, तो खोज बार को "ا" अक्षर वाला अक्षर और एक ही समय में "أ" अक्षर दिखाना चाहिए।
निम्न पंक्ति का उपयोग करें:
NSDiacriticInsensitiveSearch और अरबी खोज

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

शब्द "ا" से आरंभ होने के परिणाम दिखाई नहीं देंगे।
खोज बार में, मैं एक ही NSDiacriticInsensitiveSearch विधि को लागू करने की कोशिश की कि मैं फ्रेंच मामले में किया था, और इसे बाहर काम नहीं किया:

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

कोई भी विचार कैसे इस किया जाना?

उत्तर

0

आप अरबी (अलीफ) विभिन्न आकारों को संभालने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

मान लें यदि आप कोई संदर्भ है, वह यह है कि "محمد بن إبراهيم الابراهيمي", और के लिए खोज करने के लिए पैटर्न कि "إبراهيم", तो आप पैटर्न एक रेगुलर एक्सप्रेशन के बीच अंतर हैंडल करने के लिए परिवर्तित कर सकते हैं "एबी"। नियमित अभिव्यक्ति "(أ | إ | ا) بر (أ | إ | ا) هيم" होना चाहिए। यह पैटर्न को अपने सभी संभावित आकारों से खोजेगा।

#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; 
} 

गुड लक भाई:

यहाँ एक सरल कोड है कि मैंने लिखा है।

0

ऐसा लगता है कि आप यौगिक प्रतीक (यू + 0623) का उपयोग कर रहे हैं, जो अलीफ के अन्य प्रस्तुतियों के साथ मेल नहीं खाता है।

क्या आपने अलीफ के लिए अन्य एन्कोडिंग विधियों पर विचार किया था? आप विघटित संस्करण है, जो तब "सादे" अलिफ़ (U + 0627) के साथ मुक़ाबला होगा इस्तेमाल कर सकते हैं आप कितना इरादा:

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

यहाँ देखें: http://www.fileformat.info/info/unicode/char/0623/index.htm

संबंधित मुद्दे