我正在使用此方法验证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。
答案 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
/
playlist
,watch?
,channel
或user
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)
}