Как проверить частный/локальный IP-адрес с помощью регулярного выражения

Надеюсь, все у вас будет хорошо. Я создаю приложение IOS, в котором я предупреждаю пользователя, если он набрал частный/локальный IP-адрес в текстовом поле. Я искал в Интернете и нашел это в приложении для Android с использованием регулярного выражения: Java: (127.0.0.1)|(192.168.$) | (172.1[6-9].$) | (172.2[0-9].$) | (172.3[0-1].$) | (10.*$)

Я хочу такое же регулярное выражение для приложения IOS, но я не знаю, как его закодировать. Я искал в Интернете и нашел Идентификатор частного IP-адреса в регулярном выражении, но я не мог этого понять. Я просто знаю какой-то объектив-с. Может ли кто-нибудь помочь мне в этом отношении, пожалуйста.

Хорошо, ребята, наконец, я думаю, что решил проблему, следуя коду.

-(void)CheckIP
{
    NSError *error = NULL;
    NSString *pattern = @"(127.0.0.1)|(192.168.$)|(172.1[6-9].$)|(172.2[0-9].$)|(172.3[0-1].$)|(10.*$)";     // "[a-zA-Z]+[,]\\s*([A-Z]{2})";
    NSString *string = self.tfExternalHost.text;
    NSRange range = NSMakeRange(0, string.length);
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
    NSArray *matches = [regex matchesInString:string options:NSMatchingProgress range:range];
    NSLog(@" Found Match %@", matches);
}

Предложите мне, можно ли улучшить приведенный выше код.


person Zeebok    schedule 06.11.2015    source источник
comment
У вас есть регулярное выражение. Проведите небольшое исследование класса NSRegularExpression.   -  person rmaddy    schedule 06.11.2015
comment
привет, посмотрите эту ссылку на вашу ссылку stackoverflow.com/a/10971521/2910061   -  person Ilesh P    schedule 06.11.2015
comment
спасибо всем вам за ваш ответ. Позвольте мне попробовать, и тогда я сообщу вам.   -  person Zeebok    schedule 06.11.2015
comment
Уважаемый @ilesh, Спасибо за ваш ответ. Предоставленная вами ссылка предназначена для проверки IP-адреса с помощью регулярного выражения. Мне нужен код, который может проверить, не является ли IP-адрес частным или локальным IP-адресом. Можете ли вы помочь мне в этом отношении.   -  person Zeebok    schedule 06.11.2015


Ответы (2)


Я решил проблему.

-(BOOL)CheckIPAddress
{
    // this code is to check either user entered local/private ip-address
    NSError *error = NULL;    
    NSString *pattern = @"((127\.)|(10\.)|(172\.1[6-9]\.)|(172\.2[0-9]\.)|(172\.3[0-1]\.)|(192\.168\.))";
    NSString *string = self.tfExternalHost.text;
    NSRange range = NSMakeRange(0, string.length);
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
    NSArray *matches = [regex matchesInString:string options:NSMatchingProgress range:range];
    if (matches.count>0) {
        UIAlertView *simpleAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Warning", nil) message:NSLocalizedString(@"Please provide valid external IP address.", nil) delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [simpleAlert show];
        return true;
    }
    return false;
}
person Zeebok    schedule 06.11.2015
comment
Вместо: NSString *pattern = @((127\.)|(10\.)|(172\.1[6-9]\.)|(172\.2[0-9]\.)|( 172\.3[0-1]\.)|(192\.168\.)); Должно быть: @((127\\.)|(10\\.)|(172\\.1[6-9]\\.)|(172\\.2[0-9]\\. )|(172\\.3[0-1]\\.)|(192\\.168\\.)) - person Antoine Rosset; 07.06.2016
comment
Как насчет IPv6? @Зибок - person Jaybo; 11.10.2016
comment
@Zeebok: новый ответ с поддержкой ipv6 опубликован ниже - person xaphod; 11.11.2016

Мне также нужна была поддержка IPv6, так что вот мой ответ. Также обратите внимание, что регулярные выражения iOS должны были избегать обратной косой черты, как указал Антуан.

Вот категория для NSString, которая возвращает YES, если это локальный/частный IP-адрес. Обратите внимание, что этот код предполагает, что строка является действительным IP-адресом (т.е. она будет соответствовать 192.168.chocolate.sundae)

    - (BOOL)isPrivateIPAddress {
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(^127\\.)|(^192\\.168\\.)|(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^::1$)|(^[fF][cCdD])" options:0 error:nil];
        NSArray *matches = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
        if (matches.count > 0)
            return YES;
        return NO;
    }

Покупатель, будьте осторожны: я провел лишь ограниченное тестирование этого.

person xaphod    schedule 11.11.2016