Iphone 检查字符串是否为url-Objective-C
可能重复:Iphone 检查字符串是否为url-Objective-C,iphone,objective-c,xcode,ipad,Iphone,Objective C,Xcode,Ipad,可能重复: 在Objective-C中,是否有人有好的方法来测试给定字符串是否为URL?执行以下操作: NSURL* url = [NSURL URLWithString:stringToTest]; if (url && url.scheme && url.host)//This comparision never fails { //the url is ok NSLog(@"%@ is a valid URL", yourUrlString);
在Objective-C中,是否有人有好的方法来测试给定字符串是否为URL?执行以下操作:
NSURL* url = [NSURL URLWithString:stringToTest];
if (url && url.scheme && url.host)//This comparision never fails
{
//the url is ok
NSLog(@"%@ is a valid URL", yourUrlString);
}
如果stringToTest
确实是一个URL,则URL将按预期实例化。否则+[NSURL URLWithString:
返回nil
Cocoa Touch中的大多数方法在非法输入时返回nil
,实际上很少抛出NSInvalidArgumentException
。每个方法都记录了它们在无效输入时返回的内容。执行以下操作:
NSURL* url = [NSURL URLWithString:stringToTest];
if (url && url.scheme && url.host)//This comparision never fails
{
//the url is ok
NSLog(@"%@ is a valid URL", yourUrlString);
}
如果stringToTest
确实是一个URL,则URL将按预期实例化。否则+[NSURL URLWithString:
返回nil
Cocoa Touch中的大多数方法在非法输入时返回
nil
,实际上很少抛出NSInvalidArgumentException
。每个方法都记录了它们在无效输入时返回的内容。您可以使用正则表达式。对于iPhone3和更高版本,您可以在没有框架的情况下完成。否则使用RegexKitLite或其他东西
以下是用于检查URL的正则表达式模式:
"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"
在没有框架的情况下这样做:
- (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];
}
可以使用正则表达式。对于iPhone3和更高版本,您可以在没有框架的情况下完成。否则使用RegexKitLite或其他东西 以下是用于检查URL的正则表达式模式:
"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"
在没有框架的情况下这样做:
- (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];
}
使用PeyloW所述的
NSURL
。NSURL旨在处理完整的URL标准;最好不要再发明轮子了。事实上,我忘了NSUrl。但是,如果出于某种原因,您想要放松(或者更加严格,NSUrl将接受http和https以外的前缀)验证标准,那么您可能仍然希望能够定义您自己的模式。耶--但是您可能希望从一个[可能要复杂得多]的表达式开始接受该标准,然后后退以支持非标准URL。或者,最好修复无效URL的来源。:)嗯。如果它是从www开始的,比如www.google.com呢?你可以尝试上面的模式减去(http | https)://部分:(\\w)*([0-9]*)([-\\\\.\u]*)+([\\\.\ 124]/](\\ w)*([0-9]*)([-\\\\\.*)+”但正如bbum所建议的那样,强迫你的用户提供一个带有前缀和所有语言NSURL
的有效URL可能更好。NSURL旨在处理完整的URL标准;最好不要再发明轮子了。事实上,我忘了NSUrl。但是,如果出于某种原因,您想要放松(或者更加严格,NSUrl将接受http和https以外的前缀)验证标准,那么您可能仍然希望能够定义您自己的模式。耶--但是您可能希望从一个[可能要复杂得多]的表达式开始接受该标准,然后后退以支持非标准URL。或者,最好修复无效URL的来源。:)嗯。如果它是从www开始的,比如www.google.com呢?你可以尝试上面的模式减去(http | https)://部分:(\\w)*([0-9]*)([-[124; |]*)+([\\.[124;]/](\\ w)*([0-9]*)([-[124; |]*)+”但正如bbum所建议的那样,强制用户提供一个带有前缀的有效URL可能更好,记住这将验证任何URL。因此,即使它是一个文件URL或web URL,它们都将通过这种形式的检查验证为true。PeyloW的回答是正确的,我只是想让你知道web URL不是NSURL接受的唯一类型。还要注意,它验证部分和相对URL。所以,检查模式和/或域是否存在也是一种很好的做法。这实际上不起作用。如果字符串为空,或者您只需在字符串“asdf”中输入任何内容,那么url将不会为零,从而通过此测试。是的-对于xcode 4.6.3和iOS 6上的web url不起作用。这个代码示例只返回字符串作为url的任何内容-我可以只输入我的名字simon,因为stringToTest和url以值“simon”结束。下面的步骤不起作用。。NSURLRequest*request=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];返回[NSURLConnection CanHandlerRequest:request];请记住,这将验证任何URL。因此,即使它是一个文件URL或web URL,它们都将通过这种形式的检查验证为true。PeyloW的回答是正确的,我只是想让你知道web URL不是NSURL接受的唯一类型。还要注意,它验证部分和相对URL。所以,检查模式和/或域是否存在也是一种很好的做法。这实际上不起作用。如果字符串为空,或者您只需在字符串“asdf”中输入任何内容,那么url将不会为零,从而通过此测试。是的-对于xcode 4.6.3和iOS 6上的web url不起作用。这个代码示例只返回字符串作为url的任何内容-我可以只输入我的名字simon,因为stringToTest和url以值“simon”结束。下面的步骤不起作用。。NSURLRequest*request=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];返回[NSURLConnection CanHandlerRequest:request];