Как проверить IP-адрес с регулярным выражением в Objective C?

От Joshua Bloch, самого Гуру Java в Эффективном Java 2-й выпуск:

"Объект 69: Предпочтите, чтобы утилиты параллелизма ожидали и уведомили".

8
задан Pang 27 January 2015 в 20:52
поделиться

2 ответа

Вот альтернативный подход, который также может помочь. Предположим, у вас есть NSString * , который содержит ваш IP-адрес, называемый ipAddressStr , в формате abcd :

int ipQuads[4];
const char *ipAddress = [ipAddressStr cStringUsingEncoding:NSUTF8StringEncoding];

sscanf(ipAddress, "%d.%d.%d.%d", &ipQuads[0], &ipQuads[1], &ipQuads[2], &ipQuads[3]);

@try {
   for (int quad = 0; quad < 4; quad++) {
      if ((ipQuads[quad] < 0) || (ipQuads[quad] > 255)) {
         NSException *ipException = [NSException
            exceptionWithName:@"IPNotFormattedCorrectly"
            reason:@"IP range is invalid"
            userInfo:nil];
         @throw ipException;
      }
   }
}
@catch (NSException *exc) {
   NSLog(@"ERROR: %@", [exc reason]);
}

Вы можете изменить , если условный блок для выполнения рекомендаций RFC 1918 , если вам нужен такой уровень проверки.

5
ответ дан 3 November 2019 в 12:49
поделиться

Уловку, которую вы можете сделать, это проверить возврат BSD-вызова inet_aton следующим образом:

#include <arpa/inet.h>

- (BOOL)isIp:(NSString*)string{
    struct in_addr pin;
    int success = inet_aton([string UTF8String],&pin);
    if (success == 1) return TRUE;
    return FALSE;
}

Имейте в виду, однако, что это проверяет строку, если она содержит IP-адрес в любом формате, он не ограничивается форматом с точками.

1
ответ дан 3 November 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: