【问题标题】:How to check private/local IP address by using regular expression如何使用正则表达式检查私有/本地 IP 地址
【发布时间】:2016-02-07 04:50:53
【问题描述】:

希望你们一切都好。我正在构建一个 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 但我无法理解。我只知道一些objective-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);
}

如果上面的代码可以改进,建议我。

【问题讨论】:

  • 你有正则表达式。对NSRegularExpression 类做一些研究。
  • 您好,请参阅此链接到您的参考stackoverflow.com/a/10971521/2910061
  • 感谢大家的回复。让我试试,然后我会通知你。
  • 亲爱的@ilesh,感谢您的回复。您提供的参考用于使用正则表达式验证 IP 地址。我需要一个可以检查 ip 地址不是私有或本地 IP 的代码。你能在这方面帮助我吗?

标签: ios objective-c regex nsregularexpression


【解决方案1】:

我已经解决了这个问题。

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

【讨论】:

  • 代替: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\\.))"
  • IPv6 怎么样? @Zeebok
  • @Zeebok:下面发布了支持 ipv6 的新答案
【解决方案2】:

我也需要 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;
    }

请注意:我只对此进行了有限的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 2013-01-08
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2011-06-20
    • 2017-03-15
    相关资源
    最近更新 更多