手机号判断

拨打电话的功能大家肯定都会用到,不多说,在此先附上代码:

+ (void)callTel:(NSString *)tel {
    NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",tel];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
}

判断字符串是否为手机号
方法一:(未验证)

// 校验用户手机号码
+ (BOOL)validateUserPhone:(NSString *)str {
    if (!str || [str isEqualToString:@""]) return NO;
    NSRegularExpression *regularexpression = [[NSRegularExpression alloc] initWithPattern:@"^1[3|4|5|7|8][0-9][0-9]{8}$" options:NSRegularExpressionCaseInsensitive error:nil];
    NSUInteger numberofMatch = [regularexpression numberOfMatchesInString:str options:NSMatchingReportProgress range:NSMakeRange(0, str.length)];
    if(numberofMatch > 0) return YES;
    return NO;
}

方法二:(较好)

+ (BOOL)isMobileNumber:(NSString *)mobileNum {
    NSString * PHS = @"^1(3|5|7|8|4)\\d{9}";
    NSPredicate * regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", PHS];
    if ([regextestct evaluateWithObject:mobileNum]) return YES;
    return NO;
}

方法三:(好像不太严谨)

+ (BOOL)isMobileNumber:(NSString *)mobileNum {
    NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";
    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", PHS];
    if (([regextestct evaluateWithObject:mobileNum] == YES)) return NO;
    if (mobileNum.length == 11) return YES;
    return NO;
}


有时候项目中我们需要保护客户隐私信息,即需要不完全显示用户的手机号码,例如隐藏用户手机号码的中间四位即可使用以下方法。

// 隐藏用户手机号码的中间四位
+ (NSString*)blurMobile:(NSString*)str {
    if ([self validateUserPhone:str]) {
        return [str stringByReplacingCharactersInRange:NSMakeRange(3, 4) withString:@"****"];
    }
    return nil;
}

如果你有更好的方法的话,欢迎交流

你可能感兴趣的:(手机号判断)