在我正在开发的一个iPhone应用程序中,有一个可以输入网址的设置,由于表单和功能的原因,这个网址需要在线和离线验证。
到目前为止,我还没有找到任何方法来验证url,所以问题是;
如何在线和离线验证iPhone (Objective-C)上的URL输入?
发布于 2010-09-29 15:27:31
多亏了this post,你可以避免使用RegexKit。这是我的解决方案(适用于iOS >3.0时的iphone开发):
- (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签到我的解决方案,如下所示:
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
}发布于 2011-02-23 01:14:24
为什么不简单地依赖Foundation.framework呢?
它可以完成这项工作,并且不需要RegexKit:
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。
发布于 2014-01-03 05:49:19
我一直在使用NSString上的一个类别,使用NSDataDetector来测试字符串中是否存在链接,而不是编写自己的正则表达式。如果NSDataDetector找到的链接的范围等于整个字符串的长度,则它是一个有效的URL。
- (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;
}https://stackoverflow.com/questions/1471201
复制相似问题