今天看啥  ›  专栏  ›  萌小奇

iOS 地址URL判断😊

萌小奇  · 简书  ·  · 2019-02-27 14:10

为什么要做这件事

最近公司需要一个自定义后台URL,使用常规的网上的判断网络地址URL正则表达是总是判断不准确。
经过多方求证,发现苹果对一些常用的正则匹配都作了封装,如时间、时区、网页链接url、电话号码等等。而且这些识别是国际化的,比如中国的手机号是13044345467,XX国的手机号是932-23333222,它都可以识别。又比如中国人的名字是王大锤,英国人的名字是 William Jafferson Clinton,也都能识别。

举例: 验证URL方法

  1. 常规出现错误示例

匹配网址URL的正则表达式:
[a-zA-z]+://[^\s]

//判断地址是否正确
- (BOOL)verifyWebUrlAddress:(NSString *)webUrl
{
  return [webUrl isMatchWithRegexString:@"[a-zA-z]+://[^\s]*"];
}

出现问题:

URL地址中不能存在s,否则返回NO

因为本人目前对于正则表达的博大精深只理解了些皮毛,不知道作何修改,这时候发现了苹果对一些常用的正则匹配都作了封装,喜不自胜。

  1. 苹果对一些常用的正则匹配作了封装示例

不用自己去写正则表达式匹配
采用系统类NSDataDetector

//判断地址是否正确
- (BOOL)verifyWebUrlAddress:(NSString *)webUrl
{
    NSError *error = nil;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink
                                                               error:&error];
    NSArray *matches = [detector matchesInString:webUrl
                                         options:nil
                                           range:NSMakeRange(0, webUrl.length)];

    if (matches.count == 1) {
        NSTextCheckingResult *result = matches.firstObject;
        if (result.range.location == 0) {
            return YES;
        } else {
            return NO;
        }
    } else {
        return NO;
    }
}

不过,在查找方法过程中,发现
验证URL链接更简单的办法我们还可以借助系统提供的 canOpenURL() 方法来检测一个链接的有效性,比如上面样例可以改成如下的判断方式:

//判断地址是否正确
- (BOOL)verifyWebUrlAddress:(NSString *)webUrl
{
    if (!webUrl) {
          return NO;
      }
    return [UIApplication.sharedApplication canOpenURL:[NSURL URLWithString:webUrl]];
}

NSDataDetector的详细使用方法




原文地址:访问原文地址
快照地址: 访问文章快照