2015-06-01 4 views
0

Я разрабатываю приложение для чата iOS, здесь у меня есть сценарий, в котором я должен идентифицировать введенный пользователем текст, содержит любые слова Abusing на моем действии кнопки отправки. У меня есть большой список слов злоупотребления для идентификации.Как определить оскорбительные слова в UITextField?

Я использовал приведенный ниже код, чтобы идентифицировать злоупотребляющие слова, но iam сталкивается с проблемой здесь например. мой список злоупотребляющих слов Массив содержит «Ад». если я введу «Hello» в текстовое поле, это будет показано как злоупотребляющее слово, потому что Hello содержит Hell.

Вот мой код

NSArray *arrayOfStrings = [[rateQuery findObjects] mutableCopy]; 
arrayOfStrings=[arrayOfStrings valueForKey:@"Words"];//List of Abusing words 

NSString *stringToSearchWithin = nameFld.text;//user entered text 
__block NSString *result = nil; 
[arrayOfStrings indexOfObjectWithOptions:NSEnumerationConcurrent 
          passingTest:^(NSString *obj, NSUInteger idx, BOOL *stop) 
{ 
    if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound) 
    { 
     result = obj; 
     *stop = YES; 
     //return YES; 
    } 
    return NO; 
}]; 
if (!result){ 
    NSLog(@"The string does not contain any of the strings from the arrayOfStrings"); 

} 
else 
{ 
    NSLog(@"The string contains Abusing words"); 
} 
+0

Я предлагаю вам использовать 'NSRegularExpression'. – Larme

+0

Вы должны проверить, есть ли пробел, вопросительный знак и т. Д. Перед или/и за этим словом. Если что-то впереди и что-то позади, оно должно работать. Regex было бы неплохо, как упоминалось в Larme. – Maik639

+0

взгляните на это https://github.com/IslandOfDoom/IODProfanityFilter – rob180

ответ

0

В конце концов я решил свою проблему с помощью кода ниже.

+(BOOL)profaneWordsFilterInText:(NSString *)inText 
    { 

    NSArray * listOfProfaneWords = [[self wordSet] allObjects]; 
    NSError *error = NULL; 

    NSString *profaneWord ; 

    for (profaneWord in listOfProfaneWords) 
    { 
     NSString *as=[NSString stringWithFormat:@"\\b%@\\b", profaneWord ]; 

    NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:as options:NSRegularExpressionCaseInsensitive error:&error]; 

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:inText options:0 range:NSMakeRange(0, [inText length])]; 

    if (numberOfMatches > 0) 
    { 
     return YES; 
    } 
} 
return NO; 
} 
0

Вы можете изменить этот

if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound)

к следующему:

if ([stringToSearchWithin rangeOfString:obj].location != NSNotFound && stringToSearchWithing.length == obj.length)

Другой подход может быть разделите текст пробелами или другими разделителями, а затем проверьте, содержатся ли эти слова в вашем массиве слов.

1

Разбейте каждое сообщение на массив слов, а затем просто пропустите каждое слово.

В идеале, однако, вы должны изучить регулярное выражение (регулярное выражение). Какао поддерживает регулярное выражение с использованием NSRegularExpression.

+0

Его работа прекрасна, если я держусь так: NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern: @ "\\ b (apple) \\ w ++ \\ b" options: NSRegularExpressionCaseInsensitive error: & errRegex]; Но я не могу понять, где я должен передать свой массив строк –

Смежные вопросы