帮我编写代码,如"如果我的字符串是一个有效的URL,请执行smth"是否可以用几行代码编写它?
And*_*scu 19
我将假设通过URL,您指的是标识Internet资源位置的字符串.
如果您对输入字符串的格式有所了解,那么为什么不手动检查字符串是否以您需要的方式开头http://,https://或者您需要的其他方案.如果你希望其他协议,也可以将它们添加到检查列表(例如ftp://,mailto://等)
if ([myString hasPrefix:@"http://"] || [myString hasPrefix:@"https://"])
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找更可靠的解决方案并检测任何类型的URL方案,那么您应该使用正则表达式.
作为旁注,NSURL类旨在表达任何类型的资源位置(而不仅仅是Internet资源).这就是为什么,字符串喜欢img/demo.jpg或file://bla/bla/bla/demo.jpg可以转换为NSURL对象.
但是,根据文档,[NSURL URLWithString]如果输入字符串不是有效的Internet资源字符串,则应返回nil.在实践中它没有.
+ (BOOL)validateUrlString:(NSString*)urlString
{
if (!urlString)
{
return NO;
}
NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSRange urlStringRange = NSMakeRange(0, [urlString length]);
NSMatchingOptions matchingOptions = 0;
if (1 != [linkDetector numberOfMatchesInString:urlString options:matchingOptions range:urlStringRange])
{
return NO;
}
NSTextCheckingResult *checkingResult = [linkDetector firstMatchInString:urlString options:matchingOptions range:urlStringRange];
return checkingResult.resultType == NSTextCheckingTypeLink
&& NSEqualRanges(checkingResult.range, urlStringRange);
}
Run Code Online (Sandbox Code Playgroud)
我使用这个解决方案,这显然是一个比正则表达式检查更好,更复杂的检查 -
- (BOOL)isURL:(NSString *)inputString
{
NSURL *candidateURL = [NSURL URLWithString:inputString];
return candidateURL && candidateURL.scheme && candidateURL.host;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7714 次 |
| 最近记录: |