如何使用正则表达式检查私有/本地IP地址

时间:2015-11-06 05:22:43

标签: ios objective-c regex nsregularexpression

希望你们所有人都没事。我正在构建一个IOS应用程序,我在其中警告用户是否在文本字段中键入了私有/本地IP地址。 我在互联网上搜索过,发现它是使用正则表达式在Android应用程序中完成的: Java:(127.0.0.1)|(192.168。$)| (172.1 [6-9]。$)| (172.2 [0-9]。$)| (172.3 [0-1]。$)| (10 * $)

我想为IOS应用程序使用相同的正则表达式,但我不知道如何编写代码。 我在互联网上搜索并找到了 Private IP Address Identifier in Regular Expression 但我无法理解。我只知道一些目标-c。有人可以在这方面帮助我。

好的伙计们,我认为我已经通过代码解决了这个问题。

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

建议我是否可以改进上述代码。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我也需要IPv6支持,所以这是我的答案。此外,请注意,正如Antoine指出的那样,iOS正则表达式应该已经转义了反斜杠。

这里是NSString的一个类别,如果它是本地/私有IP地址,则返回YES。请注意,此代码假定字符串是有效的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;
    }

买方 - 小心:我只对此进行了有限的测试。