2015-11-06 3 views
1

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

Я хочу такое же регулярное выражение для приложения IOS, но я не знаю, как его кодировать. Я искал в Интернете и нашел Private IP Address Identifier in Regular Expression , но я не мог этого понять. Я просто знаю какую-то цель-с. Может кто-нибудь мне поможет в этом отношении.

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

-(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); 
 
}

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

+1

У вас есть регулярное выражение. Проведите некоторое исследование класса 'NSRegularExpression'. – rmaddy

+0

привет, пожалуйста, перейдите по ссылке http://stackoverflow.com/a/10971521/2910061 – ilesh

+0

благодаря всем вам за ваш ответ. Позвольте мне попробовать, а затем я сообщу вам. – Zeebok

ответ

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; 
} 
+0

Вместо: NSString * pattern = @ "((127 \.) | (10 \.) | (172 \ .1 [6-9] \.) | (172 \ .2 [0-9] \.) | (172 \ .3 [0-1] \) | (192 \ 0,168 \)) "..; Это должно быть: @ "((127 \\.) | (10 \\.) | (172 \\. 1 [6-9] \\.) | (172 \\. 2 [0-9] \\ .) | (172 \\ 3 [0-1] \\.) | (192 \\ 168 \\.)) " –

+0

Как насчет IPv6? @Zeebok – Jaybo

+0

@ Zeebok: новый ответ с поддержкой ipv6, размещенный ниже – xaphod

1

Мне нужна поддержка 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; 
    } 

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

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

  • Нет связанных вопросов^_^