【发布时间】:2010-09-17 17:40:39
【问题描述】:
我正在尝试使用正则表达式验证 Youtube URL:
preg_match('~http://youtube.com/watch\?v=[a-zA-Z0-9-]+~', $videoLink)
它有点工作,但它可以匹配格式错误的 URL。例如,这将匹配 ok:
http://www.youtube.com/watch?v=Zu4WXiPRek
但是这样也可以:
http://www.youtube.com/watch?v=Zu4WX£&P!ek
这不会:
http://www.youtube.com/watch?v=!Zu4WX£&P4ek
我认为这是因为 + 运算符。它匹配似乎是v= 之后的第一个字符,当它需要尝试将v= 后面的所有内容与[a-zA-Z0-9-] 匹配时。任何帮助表示赞赏,谢谢。
【问题讨论】:
-
你所拥有的看起来不错。是£, & ! YouTube 字符串中的有效字符?如果是这样,请将它们添加到您的 [a-zA-Z0-9-] char 类中,否则,它是否按预期工作?
-
+ 顺便说一句,意思是:匹配以下任何字符:[a-zA-Z0-9-] 一次或多次,所以它会一直运行,直到碰到不存在的东西。跨度>
-
像这样的 Youtube 视频 ID 中允许的唯一字符是 a-z、A-Z、0-9 和 -。因此我为什么放
[a-zA-Z0-9-]。它没有按预期工作。我可以提交如下 URL:v=Zu4WX£&P!ek(在这种情况下 £、& 和 ! 是非法字符)并且它可以很好地匹配它们,因为它只检查v=之后的第一个字符。 -
如果您提供更多背景信息会有所帮助。你从哪里得到网址?是从整页抓取中获取的,并且 URL 位于 href="..." 中吗?你可以像 [a-zA-Z0-9-]+("|') 那样做你已经解析并循环遍历它们的 url 列表了吗?
-
该 URL 是由用户通过表单提交的,在我向该页面发送请求之前,我需要检查它是否是一个有效的 Youtube URL。