Подтвердить что ты не робот

Удаление специальных символов в NSString

Я преобразую абзац в слова, он содержит много специальных символов, таких как

"  , "  . `

как удалить эти символы в nsstring и получить только алфавиты в nsstring

ех "новый" на новый //the special characters are change

4b9b3361

Ответ 1

NSString *unfilteredString = @"[email protected]#$%^&*()_+|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet];
NSString *resultString = [[unfilteredString componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];
NSLog (@"Result: %@", resultString);

ПОПРОБУЙТЕ, ЧТО ЭТО МОЖЕТ ПОМОЧЬ ВАМ

Ответ 2

Существует множество способов борьбы с этим. В качестве примера здесь можно найти решение с использованием регулярных выражений. Это просто пример. Мы не знаем весь диапазон специальных символов, которые вы хотите удалить.

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"[,\\.`\"]"
                                                                                    options:0
                                                                                      error:NULL];
        NSString *sampleString = @"The \"new\" quick brown fox, who jumped over the lazy dog.";
        NSString *cleanedString = [expression stringByReplacingMatchesInString:sampleString
                                                                       options:0
                                                                         range:NSMakeRange(0, sampleString.length)
                                                                  withTemplate:@""];
        printf("cleaned = %s",[cleanedString UTF8String] );

    }
    return 0;
}

Ответ 3

Принятый ответ в SWIFT (но не SWIFTY-способе):

 let notAllowedCharactersSet = NSCharacterSet(charactersInString: "ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
 let filtered = (stringToFilter.componentsSeparatedByCharactersInSet(notAllowedCharactersSet) as NSArray).componentsJoinedByString("")

Ответ 4

За комментарий от ответа @Rostyslav Druzhchenko с комбинацией ответа @MadhuP:

NSString *unfilteredString = @"[email protected]#$%^&*()_+|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
NSCharacterSet *notAllowedChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSString *escapedString = [[unfilteredString componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];

Это ответ, который будет использовать alphanumericCharacterSet для обработки набора символов из нескольких стран.

Ответ 5

Я уверен, что есть более элегантное решение, но для тех, кто пытается это сделать в Swift, вот что я сделал, чтобы убедиться, что в номерах моих пользователей нет специальных символов.

var phone = "+1 (555) 555 - 5555"
var removeChars: NSCharacterSet = NSCharacterSet(charactersInString: "1234567890").invertedSet
var charArray = phone.componentsSeparatedByCharactersInSet(removeChars)
var placeholderString = ""
var formattedPhoneNumber: String = placeholderString.join(charArray).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Может потребоваться stringByTrimmingCharactersInSet.