2011-08-10 6 views

答えて

-2

正規表現を使用できます。 iPhone 3以降では、フレームワークなしで実行できます。それ以外の場合はRegexKitLiteなどを使用してください。

"(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]; 
} 
+3

PeyloWの記述どおりに 'NSURL'を使用してください。 NSURLは、完全なURL標準を処理するように設計されています。ホイールを再発明しないのが最善です。 – bbum

+0

真実^^私はNSUrlを忘れてしまった。何らかの理由であなたがリラックスしたい場合(または厳密にするために、NSUrlはhttpとhttps以外の接頭辞を受け入れます)、あなた自身のパターンを定義できるようにするためには、妥当性検査標準を使用してください。 – mattacular

+0

Yah - おそらく、標準を受け入れる式を[おそらくもっと複雑な]式で開始し、非標準のURLをサポートするためにバックオフしたいと思うでしょう。または、無効なURLのソースを修正することをおすすめします。 :) – bbum

25

この操作を行います。

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:] return nilです。

ココアタッチのほとんどのメソッドは、無効な入力でnilを返しますが、ほとんど実際にはNSInvalidArgumentExceptionがスローされます。それぞれのメソッドは、無効な入力で返されるもので文書化されています。

+0

ニース

はここでチェックURLの正規表現パターンです。 NSURLを使用してURL文字列を検証することは決して考えられませんでした。 –

+2

これは任意のURLを検証することを覚えておいてください。したがって、たとえそれがファイルURLまたはWeb URLであっても、この形式の検査で真となることを検証します。 PeyloWの答えは正しいです。私は、Web URLがNSURLが受け入れる唯一のタイプではないことを知らせたいと思います。 –

+2

また、部分URLと相対URLを検証することにも注意してください。したがって、スキーマやドメインのチェックがあることも良い方法です。 – PeyloW

関連する問題