0

URLが有効な場合はそれを開く必要があることをiphoneアプリでチェックする方法、それ以外の場合は無効なURLであるという警告が表示される場合があります。次のコードを使用していますが、www.google.comと入力すると有効と表示されるnice.com を入力しても、有効と表示されます。

       - (BOOL)textFieldShouldReturn:(UITextField *)textField
      {

       [textField setUserInteractionEnabled:YES];
       [textField resignFirstResponder];
       test=textField.text;

       NSLog(@"Test is working and test is %@",test);

   if ([self  urlIsValiad:test]) {
    NSURL *url = [NSURL URLWithString:test]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView setScalesPageToFit:YES];
    [self.webView loadRequest:request]; 
     } else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please enter Valid URL"  message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
     }

   return YES;



    }

  - (BOOL) urlIsValiad: (NSString *) url 


 {

NSString *regex = 
@"((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
/// OR use this 
///NSString *regex = "(http|ftp|https)://[\w-_]+(.[\w-_]+)+([\w-.,@?^=%&:/~+#]* [\w-\@?^=%&/~+#])?";
NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

if ([regextest evaluateWithObject: url] == YES) {
    NSLog(@"URL is valid!");

    test=@"Valid";


}  else {
    NSLog(@"URL is not valid!");

    test=@"Not Valid";


}

return [regextest evaluateWithObject:url];
 }
4

5 に答える 5

5

URL が有効かどうかを確認する場合は、次の RegEx を使用します。

NSString *urlString = [NSString stringWithFormat:@"URL_STRING"];
NSString *urlRegEx =
    @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlPredic = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
BOOL isValidURL = [urlPredic evaluateWithObject:urlString];

そして、次のような条件を付けます

if(isValidURL)
{
  // your URL is valid;
}
else
{
  // show alert message for invalid URL;
}

また、URL を合法的な URL として変換することもできます。

NSString *urlString = [NSString stringWithFormat:@"URL_STRING"];
NSURL *youURL = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

詳細については、チェックしてくださいstringByAddingPercentEscapesUsingEncoding:

于 2013-09-09T05:37:59.837 に答える
2

これで確認できます

-(BOOL)isValidURL
{
    BOOL isValidURL = NO;   
    NSURL *candidateURL = [NSURL URLWithString:self];
    if (candidateURL && candidateURL.scheme && candidateURL.host)
        isValidURL = YES;
    return isValidURL;
}

そしてこのようにテストします

if([YOUR_TEXTFIELD.text isValidURL]){
   NSLog(@"Valid URL");
}
于 2013-09-09T05:42:37.363 に答える
1

URL を検証するための正規表現を見つける努力には感心しますが、この URL を使用して実際にリソースにアクセスしたい場合は、一般的に十分ではありません。構文的に正しいことが判明する場合もありますが、この URL がサーバーで機能しない理由は無数にあります。たとえば、サーバーが拒否するクエリ文字列内の認識されないトークンなどです。

この「検証」は、たとえば、この URL をデータベースに保存する場合など、URL のように見える任意のジャンクが入力されるのを防ぎたい場合に役立ちます。ただし、リソースをロードするためにすぐに使用したい場合は無意味です。

あなたの場合、URL が「構文的に有効」かどうかを確認するだけでは不十分です。確認する唯一の方法は、実際に使用して、リソースのロードに失敗したときにエラー コードを返すことです。検証によって何かが保存されると事前に考えるのは正しくありません。URL が有効で機能している場合、これは不要なコストです。

したがって、基本的に次のようにアプローチを変更します。

  1. 非同期メソッドを使用して結果を返す
  2. エラーをチェックする
于 2013-09-09T09:17:04.403 に答える