Youtube URL验证ios

时间:2016-06-07 10:50:03

标签: ios objective-c regex youtube

我正在使用此方法验证youtube网址,但它无效。

    -(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];

}
  

即使我编辑网址并使其成为y.be而不是youtu.be,仍然如此   这些方法返回YES

。请告诉我我的代码有什么问题。 如果任何人有更好的RegEx请与我分享。 我也想知道如何编写RegEx。

4 个答案:

答案 0 :(得分: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;
}

现在请检查让我知道我在等你的重播是否有效。

答案 1 :(得分:0)

如果你正在寻找正则表达式,那么也许你可以试试这个:

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

它将匹配:

  • http://https://或其中没有
  • www.m.或其中没有
  • youtube.<anyTLD>youtu.be
  • /
  • playlistwatch?channeluser
  • 来自a-zA-Z0-9=的字符串超过1次

这应该有效地匹配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

我希望这有助于你

答案 2 :(得分:0)

如果你想检查String是否是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)
}

答案 3 :(得分:-1)

对于 Swift 5:

func isValidYouTubeLink(givenString: 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.evaluate(with: givenString)

    }