【问题标题】:URL Validation (Objective-C)URL 验证 (Objective-C)
【发布时间】:2012-01-03 16:55:05
【问题描述】:

我正在尝试使用此方法验证 URL:

代码:

- (BOOL) validateUrl: (NSString *) candidate {

    NSString *urlRegEx=
    @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";

    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate];

}

它不起作用。我认为问题出在正则表达式上。

【问题讨论】:

    标签: objective-c regex nsregularexpression


    【解决方案1】:

    如何使用以下内容:

    NSURL * url = [NSURL URLWithString:@"http://www.google.com"];

    BOOL isValid = [UIApplication.sharedApplication canOpenURL:url];

    注意:最佳实践是使用正则表达式

    【讨论】:

      【解决方案2】:

      您可以使用NSURL+ (id)URLWithString:(NSString *)URLString 方法,如果字符串格式错误,该方法将返回nil

      使用if (URL && URL.scheme && URL.host) 检查网址。

      【讨论】:

      • 我试过了!但它仍然不起作用!例如“ht://www.yahoo”。这很好用!它不会返回零!!!
      • 这是根据 RFC 2396 的有效 URl。来自苹果文档 用于初始化 NSURL 对象的字符串。必须是符合 RFC 2396 的 URL。此方法根据 RFC 1738 和 1808 解析 URLString。使用“if (URL && URL.scheme && URL.host)”检查 URL。
      • RFC 2396 使用这个 ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)( \?([^#]*))?(#(.*))?正则表达式。更多信息请参考ietf.org/rfc/rfc2396.txt
      • 我会按照这里的建议做,然后将 [url scheme] 与方案白名单匹配。
      • 这是错误的!无论传递的字符串如何,[NSURL urlWithString:] 都会返回一个非零 URL。如果您不相信,请尝试[NSURL urlWithString:@"foo"]
      【解决方案3】:
      NSString *urlRegEx = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
      

      【讨论】:

      • 不是最好的正则表达式。例如,Https://google.com 不适用于大写“H”,即使这是一个有效的 URL。
      【解决方案4】:

      试试这个..

      - (BOOL) validateUrl: (NSString *) candidate {
          NSString *urlRegEx =
          @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
          NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
          return [urlTest evaluateWithObject:candidate];
      }
      

      它可能会帮助你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 2011-04-24
        • 2011-03-26
        • 2017-09-28
        相关资源
        最近更新 更多