2

この関数を使用して、URLが有効かどうかを確認します。ほとんどの場合に機能しますが、ここでは無効な次のURLが返されます。

http://www.iphonedevsdk.com/forum/iphone-sdk-development/11841-stringbytrimmingcharactersinset.html

すべてのURLタイプをカバーするように、関数の正規表現を改善するにはどうすればよいですか?

- (BOOL) urlIsValiad: (NSString *) url 
{
    NSString *regex = 
    @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
    NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

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

    return [regextest evaluateWithObject:url];
}
4

5 に答える 5

2

これは私の試みです:

((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?

(?<=/)追加の特異性のためにバックリファレンスに追加された編集

編集2URLに国名のオプションの検索を追加しました(例:www.google.com.in)

于 2011-12-20T06:29:54.423 に答える
1

次のように*regex=行を変更してみてください。

NSString * regex = "(http | ftp | https):// [\ w -_] +(。[\ w -_] +)+([\ w-。、@?^ =%&:/〜+ #] * [\ w-\ @?^ =%&/〜+#])? "

于 2011-12-20T05:34:31.493 に答える
0

さて、私はマイクロソフトのサイトで何かを見つけました、そしてわずかな変更でそれはこれまでのところ最高の表現です:

@"(?:[A-Za-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%\\&'*+/=?\\^_`{|}"

@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"

@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-"

@"z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:25[0-5"

@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"

@"9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"

@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
于 2012-03-14T13:00:44.307 に答える
0

古いスレッドですが、私の修正は、ここに着陸する他の誰かに役立つかもしれないと思います:

ホスト名として「www」だけをチェックするのは好きではありませんでした。最近は別のホスト名に遭遇する可能性があります...したがって、正規表現を次のように拡張しました。

"((?:http|https)://)?(?:[A-Za-z0-9]{1,25}\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?"
于 2015-11-23T20:39:29.140 に答える
0
-(BOOL)validateUrl{
//    NSString *urlRegEx =  @"((?:http|https)://)?(www\\.)[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
    NSString *urlRegEx =  @"((?:http|https)://)?(www\\.)[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
    if ([urlTest evaluateWithObject: self] == YES) {
        NSLog(@"URL is valid!");
    } else {
        NSLog(@"URL is not valid!");
    }
    return [urlTest evaluateWithObject:self];
}
于 2018-01-04T11:16:01.440 に答える