首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iPhone上验证url

如何在iPhone上验证url
EN

Stack Overflow用户
提问于 2009-09-24 11:53:22
回答 22查看 72.3K关注 0票数 90

在我正在开发的一个iPhone应用程序中,有一个可以输入网址的设置,由于表单和功能的原因,这个网址需要在线和离线验证。

到目前为止,我还没有找到任何方法来验证url,所以问题是;

如何在线和离线验证iPhone (Objective-C)上的URL输入?

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2010-09-29 15:27:31

多亏了this post,你可以避免使用RegexKit。这是我的解决方案(适用于iOS >3.0时的iphone开发):

代码语言:javascript
运行
复制
- (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];
}

如果你想在Swift签到我的解决方案,如下所示:

代码语言:javascript
运行
复制
 func isValidUrl(url: String) -> Bool {
        let urlRegEx = "^(https?://)?(www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6}(/[-\\w@\\+\\.~#\\?&/=%]*)?$"
        let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
        let result = urlTest.evaluate(with: url)
        return result
    }
票数 100
EN

Stack Overflow用户

发布于 2011-02-23 01:14:24

为什么不简单地依赖Foundation.framework呢?

它可以完成这项工作,并且不需要RegexKit

代码语言:javascript
运行
复制
NSURL *candidateURL = [NSURL URLWithString:candidate];
// WARNING > "test" is an URL according to RFCs, being just a path
// so you still should check scheme and all other NSURL attributes you need
if (candidateURL && candidateURL.scheme && candidateURL.host) {
  // candidate is a well-formed url with:
  //  - a scheme (like http://)
  //  - a host (like stackoverflow.com)
}

根据苹果公司的文档:

NSURL URLWithString:创建并返回使用提供的字符串初始化的

对象。

+ (id)URLWithString:(NSString *)URLString

参数

URLString:用于初始化NSURL对象的字符串。必须符合RFC 2396。此方法根据RFC 1738和1808解析URLString。

返回值

使用URLString初始化的NSURL对象。如果字符串格式不正确,则返回nil。

票数 239
EN

Stack Overflow用户

发布于 2014-01-03 05:49:19

我一直在使用NSString上的一个类别,使用NSDataDetector来测试字符串中是否存在链接,而不是编写自己的正则表达式。如果NSDataDetector找到的链接的范围等于整个字符串的长度,则它是一个有效的URL。

代码语言:javascript
运行
复制
- (BOOL)isValidURL {
    NSUInteger length = [self length];
    // Empty strings should return NO
    if (length > 0) {
        NSError *error = nil;
        NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
        if (dataDetector && !error) {
            NSRange range = NSMakeRange(0, length);
            NSRange notFoundRange = (NSRange){NSNotFound, 0};
            NSRange linkRange = [dataDetector rangeOfFirstMatchInString:self options:0 range:range];
            if (!NSEqualRanges(notFoundRange, linkRange) && NSEqualRanges(range, linkRange)) {
                return YES;
            }
        }
        else {
            NSLog(@"Could not create link data detector: %@ %@", [error localizedDescription], [error userInfo]);
        }
    }
    return NO;
}
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1471201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档