2016-06-07 3 views
0

Я использую этот метод для проверки URL-адреса youtube, но он не работает.Проверка правильности Youtube ios

-(BOOL) validateUrl: (NSString *) candidate 
{ 

    NSString *urlRegEx = @"(http://youtu.be/[a-zA-Z0-9_-]+)"; 


    urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 

    return [urlTest evaluateWithObject:candidate]; 

} 

-(BOOL) validateUrl1: (NSString *) candidate1 
{ 


    NSString *urlRegEx1 = @"(https://(www|m){0,1}.youtube.com/(watch|playlist)[?]v=[a-zA-Z0-9_-]+)"; 


    urlTest1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx1]; 


    return [urlTest1 evaluateWithObject:candidate1]; 

} 

Даже если я изменить URL-адрес и сделать его y.be вместо youtu.be, до сих пор эти методы возвращают YES

. Пожалуйста, скажите мне, что не так в моем коде. Если у кого-то есть лучший RegEx, пожалуйста, поделитесь этим со мной. Я также хотел бы знать, как написать RegEx.

ответ

0
NSString *urlString = [NSString stringWithFormat:@"URL_STRING"]; 
    NSString *urlRegEx = @"(?:(?:\.be\/|embed\/|v\/|\\?v=|\&v=|\/videos\/)|(?:[\\w+]+#\\w\/\\w(?:\/[\\w]+)?\/\\w\/))([\\w-_]+)"; 
    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; 
} 

сейчас, пожалуйста, проверьте, дайте мне знать, я жду вашего повтора, это работа или нет.

+0

я попытался использовать этот код, но, даже если я прохожу facebook URL эта функция возвращает истину. – CodeGuru

+0

может я знать ваш URL Youtube, который вы используете –

+0

Http: //.be/DU6ldS2gVog Приведенный выше код возвращает YES для этого URL также – CodeGuru

0

Если это регулярное выражение, которое вы ищете, то, возможно, вы могли бы попробовать это:

(((?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.[a-z]{2,}|youtu\.be)(?:\/(?:playlist|watch\?|channel\/|user\/)[\w=]+)+)

Это будет соответствовать:

  • http://, https:// или ни один из этих
  • www. или m. или ни один из этих
  • youtube.<anyTLD> или youtu.be
  • /
  • playlist, watch?, channel или user
  • строка символов из a-zA-Z0-9 и = более чем 1 раз

Это должно эффективно соответствовать большинству URLs на Youtube кроме домашней страницы , который по запросу я мог бы добавить с небольшим количеством настроек.

Вы, возможно, придется добавить еще один побег, у меня нет большого опыта работы с Objective-C

(((?:https?:\\/\\/)?(?:www\\.|m\.)?(?:youtube\\.[a-z]{2,}|youtu\\.be)(?:\\/(?:playlist|watch\\?|channel\\/|user\\/)[\\w=]+)+)

Вот пример его работы в JavaScript, Python и PCRE:

https://regex101.com/r/sG1xP7/1

Я надеюсь, что это поможет вам

0

Если вы хотите проверить, если строка является ссылка на видео YouTube (а не ссылка на канал, или для встраивания видео):

func isYoutubeLink(checkString checkString: String) -> Bool { 

let youtubeRegex = "(http(s)?:\\/\\/)?(www\\.|m\\.)?youtu(be\\.com|\\.be)(\\/watch\\?([&=a-z]{0,})(v=[\\d\\w]{1,}).+|\\/[\\d\\w]{1,})" 

let youtubeCheckResult = NSPredicate(format: "SELF MATCHES %@", youtubeRegex) 
return youtubeCheckResult.evaluateWithObject(checkString) 
} 
Смежные вопросы