检查包含“http://”URL的字符串

我正在尝试检查用户输入的URL,但我正在反对一些错误和警告。

-(BOOL) textFieldShouldReturn:(UITextField *)textField { //check "http://" NSString *check = textField.text; NSString *searchString = @"http://"; NSRange resultRange = [check rangeWithString:searchString]; BOOL result = resultRange.location != NSNotFound; if (result) { NSURL *urlAddress = [NSURL URLWithString: textField.text]; } else { NSString *good = [NSString stringWithFormat:@"http://%@", [textField text]]; NSURL *urlAddress = [NSURL URLWithString: good]; } // open url NSURLRequest *requestObject = [NSURLRequest requestWithURL:urlAddress]; } 

他们说:

NSString可能不响应-rangeWithString
条件“if … else”中的未使用变量urlAddress (对于两者)
urlAddress未声明:在URLRequest

有谁知道该怎么办?

NSString响应rangeOfString: ,而不是rangeWithString: .

变量urlAddress在if语句和else语句中else声明。 这意味着它只存在于该范围内。 离开if / else语句后,变量就消失了。

对于URL,最好是以方案开头(如“http://”),并且您的代码很乐意接受apple.http://.com作为有效。

您可以使用hasPrefix:方法,如下所示:

 BOOL result = [[check lowercaseString] hasPrefix:@"http://"]; NSURL *urlAddress = nil; if (result) { urlAddress = [NSURL URLWithString: textField.text]; } else { NSString *good = [NSString stringWithFormat:@"http://%@", [textField text]]; urlAddress = [NSURL URLWithString: good]; } NSURLRequest *requestObject = [NSURLRequest requestWithURL:urlAddress]; 
 if ( [[url lowercaseString] hasPrefix:@"http://"] ) return url; else return [NSString stringWithFormat:@"http://%@", url]; 

我相信你想要rangeOfString方法。

要删除urlAddress警告,您应该在if..else上面声明NSURL *urlAddress

 NSURL *urlAddress = nil; if (result) { urlAddress = [NSURL URLWithString: textField.text]; } else { NSString *good = [NSString stringWithFormat:@"http://%@", [textField text]]; urlAddress = [NSURL URLWithString: good]; } 

如果您有NSURL将其转换为NSString

  NSString stringURL = url.absoluteString 

然后检查此NSString是否包含带有此代码的http://

  [stringURL containsString: @"http://"] - (BOOL)containsString:(NSString *)string { return [self containsString:string caseSensitive:NO]; } - (BOOL)containsString:(NSString*)string caseSensitive:(BOOL)caseSensitive { BOOL contains = NO; if (![NSString isNilOrEmpty:self] && ![NSString isNilOrEmpty:string]) { NSRange range; if (!caseSensitive) { range = [self rangeOfString:string options:NSCaseInsensitiveSearch]; } else { range = [self rangeOfString:string]; } contains = (range.location != NSNotFound); } return contains; }