【问题标题】:Youtube URL validation iosYoutube URL 验证 ios
【发布时间】:2016-10-07 05:37:28
【问题描述】:

我正在使用这种方法来验证 youtube url,但它不起作用。

    -(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,请与我分享。 我也想知道如何写正则表达式。

【问题讨论】:

    标签: ios objective-c regex youtube


    【解决方案1】:

    如果您想检查 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)
    }
    

    【讨论】:

      【解决方案2】:
          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;
      }
      

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

      【讨论】:

      • 我尝试使用此代码,但即使我通过 facebook url 此函数返回 true。
      • 我可以知道您使用的 Youtube URL
      • 请再次使用此代码我更改此 url:- NSString *urlRegEx = @"(?:(?:\.be\/|embed\/|v\/|\\?v= |\&v=|\/videos\/)|(?:[\\w+]+#\\w\/\\w(?:\/[\\w]+)?\/\\w\/ ))([\\w-_]+)";
      【解决方案3】:

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

      (((?: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

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        对于 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)
        
            }
        

        【讨论】:

          猜你喜欢
          • 2012-09-08
          • 2017-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-24
          • 2016-05-21
          • 2012-11-08
          • 2011-06-22
          相关资源
          最近更新 更多