Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 检查字符串是否为url-Objective-C_Iphone_Objective C_Xcode_Ipad - Fatal编程技术网

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];