当前位置:  开发笔记 > IOS > 正文

如何在Objective-C中使用正则表达式验证IP地址?

如何解决《如何在Objective-C中使用正则表达式验证IP地址?》经验,为你挑选了2个好方法。

如何在Objective-C中验证IP地址?



1> 小智..:

这是使用现代inet_pton的类别,它将为有效的IPv4或IPv6字符串返回YES.

    #include 

    @implementation NSString (IPValidation)

    - (BOOL)isValidIPAddress
    {
        const char *utf8 = [self UTF8String];
        int success;

        struct in_addr dst;
        success = inet_pton(AF_INET, utf8, &dst);
        if (success != 1) {
            struct in6_addr dst6;
            success = inet_pton(AF_INET6, utf8, &dst6);
        }

        return success == 1;
    }

    @end


为了将来参考,成功== 1?TRUE:不需要FALSE.一个简单的成功== 1会起作用.

2> Alex Reynold..:

这是一种可能也有帮助的替代方法.假设您有一个NSString*包含您的IP地址,称为abcdipAddressStr格式:

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

如果需要该级别的验证,您可以修改if条件块以遵循RFC 1918准则.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有