Существуют две проблемы с вашим кодом. Во-первых, ваше регулярное выражение
NSString *reg1 = @"/[$|§|%|&|{|}|'|`|´|^|°|~]/i";
неправильно:
- Регулярные выражения ICU не используют / pattern / modifier. Кроме того, зачем указывать регистронезависимое соответствие для этого набора символов?
- Регулярным выражениям ICU необходимо заключать в кавычки следующие символы:
$
{
}
^
- Как упоминалось в ridgerunner, не используйте
|
для разделения символов в классе символов.
Требуемое регулярное выражение ICU:
[\$§%&\{\}'`´\^°~]
Попробуйте это в вашей программе:
NSString *reg1 = @"[\\$§%&\\{\\}'`´\\^°~]";
(обратите внимание, что символ \
представлен как \\
в строке Objective-C.)
Во-вторых, вы тестируете
if([messageTest evaluateWithObject:message] == NO)
чтобы проверить, является ли сообщение недействительным. Но -evaluateWithObject:
возврат NO
означает, что не было соответствия, следовательно, строка не содержит ни одного из этих символов, поэтому строка является допустимой. Вам нужно изменить это на противоположное, а именно:
if([messageTest evaluateWithObject:message])
, что означает, что было совпадением, следовательно, строка содержит хотя бы один из этих символов, поэтому строка не действительна.