算法-判断一个字符串是否是ip地址?

Posted 极客学伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法-判断一个字符串是否是ip地址?相关的知识,希望对你有一定的参考价值。

算法-判断一个字符串是否是ip地址?

如何判断一个IP是否是合法的IP,如输入:192.168.1.0,输出:合法;输入192.168.1.1222,输出:非法。

首先明确IP的格式:(1~255).(0~255).(0~255).(0~255)

下面使用两种不同的方式进行验证:方案一为字符串处理,方案二为正则表达式处理

方案一:使用字符串判断

- (BOOL)ipIsValidity1:(NSString *)ip 
//    (1~255).(0~255).(0~255).(0~255)
    if (!ip || ip.length < 7 || ip.length > 15) 
        return NO;
    

    //首末字符判断,如果是"."则是非法IP
    if ([[ip substringToIndex:1] isEqualToString:@"."]) 
        return NO;
    
    if ([[ip substringFromIndex:ip.length - 1] isEqualToString:@"."]) 
        return NO;
    

    NSArray <NSString *> *subIPArray = [ip componentsSeparatedByString:@"."];
    if (subIPArray.count != 4) 
        return NO;
    

    for (NSInteger i = 0; i < 4; i++) 
        NSString *subIP = subIPArray[i];

        if (subIP.length > 1 && [[subIP substringToIndex:1] isEqualToString:@"0"]) 
            //避免出现 01.  011.
            return NO;
        
        for (NSInteger j = 0; j < subIP.length; j ++) 
            char temp = [subIP characterAtIndex:j];
            if (temp < '0' || temp > '9') 
                //避免出现 11a.19b.s.s
                return NO;
            
        

        NSInteger subIPInteger = subIP.integerValue;
        if (i == 0) 
            if (subIPInteger < 1 || subIPInteger > 255) 
                return NO;
            
        else
            if (subIPInteger < 0 || subIPInteger > 255) 
                return NO;
            
        
    
    return YES;

方案二:使用正则表达式

验证IP是否合法的正则表达式:

* //String ipRegEx = "^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(\\\\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))3$"
* //String ipRegEx = "^([1-9]|([1-9]\\\\d)|(1\\\\d2)|(2[0-4]\\\\d)|(25[0-5]))(\\\\.(\\\\d|([1-9]\\\\d)|(1\\\\d2)|(2[0-4]\\\\d)|(25[0-5])))3$"
* //String ipRegEx = "^(([1-9]\\\\d?)|(1\\\\d2)|(2[0-4]\\\\d)|(25[0-5]))(\\\\.(0|([1-9]\\\\d?)|(1\\\\d2)|(2[0-4]\\\\d)|(25[0-5])))3$"
- (BOOL)ipIsValidity2:(NSString *)ip 
    NSString  *isIP = @"^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(\\\\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))3$";
    NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:isIP options:0 error:nil];
    NSArray *results = [regular matchesInString:ip options:0 range:NSMakeRange(0, ip.length)];
    return results.count > 0;

以上是关于算法-判断一个字符串是否是ip地址?的主要内容,如果未能解决你的问题,请参考以下文章

算法判断IP地址是不是合法的,包含IPv4和IPv6

算法判断IP地址是不是合法的,包含IPv4和IPv6

python判断一个ip是否符合规则

判断一个字符串是否为有效ip地址

判断一个字符串是不是一个合法的IP地址

c++判断ip地址是不是合法